SQL優化常用方法39

inzaghi1984發表於2017-12-16
  1. 總是使用索引的第一個列
    如果索引是建立在多個列上, 只有在它的第一個列(leading column)被where子句引用時,優化器才會選擇使用該索引. 譯者按:

這也是一條簡單而重要的規則. 見以下例項.
SQL> create table multiindexusage ( inda number , indb number , descr varchar2(10));
Table created.
SQL> create index multindex on multiindexusage(inda,indb);
Index created.
SQL> set autotrace traceonly
SQL> select * from multiindexusage where inda = 1;

Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF `MULTIINDEXUSAGE`
2 1 INDEX (RANGE SCAN) OF `MULTINDEX` (NON-UNIQUE)
SQL> select * from multiindexusage where indb = 1;

Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF `MULTIINDEXUSAGE`
很明顯, 當僅引用索引的第二個列時,優化器使用了全表掃描而忽略了索引


相關文章