挑战like查询常识
一般的常识认为类似 field like '%aaa%' 的查询是无法用到field字段的索引的。
不过今天看oracle的执行计划发现不是这样的。
sql语句如下的时候:
SELECT count(*) FROM mytable WHERE code LIKE UPPER('%20071119%')
得到的Plan如下:
SELECT STATEMENT CHOOSECost: 41 Bytes: 22 Cardinality: 1
2 SORT AGGREGATE Bytes: 22 Cardinality: 1
1 INDEX FAST FULL SCAN NON-UNIQUE Index_Mytable_Code Cost: 41 Bytes: 85,844 Cardinality: 3,902
显然是用了建在code 上的索引。。。
各位大虾,不知道这是何解????
但是下面的这个sql语句就是另外一种情况:
SELECT SUM(amount) sum FROM mytable WHERE code LIKE UPPER('%20071119%')
它得到的plan如下:
Plan
SELECT STATEMENT CHOOSECost: 4,547 Bytes: 25 Cardinality: 1
2 SORT AGGREGATE Bytes: 25 Cardinality: 1
1 TABLE ACCESS FULL NEWMAN.Comm_Contract Cost: 4,547 Bytes: 97,550 Cardinality: 3,902
这个就用了一个全表扫描,速度非常慢,符合我的常识。。。
所以就有了两个问题:
1、为什么第一句sql用到了索引?
2、如何让第二句也用上索引?