复合索引的第一列一定要出现在WHERE子句中。
一.like "%_" 百分号在前.
二.WHERE中单独引用复合索引里第一位置的索引列,并且SELECT、GROUP BY等子句中包含非复合索引列
例句:
用不到索引
SELECT
CORP.BATCHCODE, CORP.CLITNO, CORP.LOANBLAN
FROM VI_CORPCLIT_INFO CORP
WHERE CORP.BATCHCODE = '200910'
用到索引
SELECT
CORP.BATCHCODE, CORP.CLITNO
FROM VI_CORPCLIT_INFO CORP
WHERE CORP.BATCHCODE = '200910'
三.字符型字段为数字时在where条件里不添加引号.
四.字符型字段||'',并且SELECT、GROUP BY等子句中包含非复合索引列。
用不到索引
SELECT
CORP.BATCHCODE, CORP.CLITNO, CORP.LOANBLAN
FROM VI_CORPCLIT_INFO CORP
WHERE CORP.CLITNO||'' = '200910'
用到索引
SELECT
CORP.BATCHCODE, CORP.CLITNO
FROM VI_CORPCLIT_INFO CORP
WHERE CORP.CLITNO||'' = '200910'
五.对索引列进行运算.需要建立函数索引。
用不到索引
SELECT
CORP.BATCHCODE, CORP.CLITNO, CORP.LOANBLAN
FROM VI_CORPCLIT_INFO CORP
WHERE substr(CORP.CLITNO,1) = '200910'
用到索引
SELECT CORP.BATCHCODE, CORP.CLITNO FROM VI_CORPCLIT_INFO CORP WHERE substr(CORP.CLITNO,1) = '200910' 六。not in, not exist, <> 七。当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。 八。基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上 九。有时都考虑到了但就是不走索引,drop了从建试试在 十。B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走