我是FE,也是Fe

前端来源于不断的点滴积累。我一直在努力。

统计

留言簿(15)

阅读排行榜

评论排行榜

Oracle索引,真的用上了么?

最近发现了一个Oracle索引的小细节。

如果索引是建立在多个列上, 只有在它的第一个列(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'

(只使用索引的第二个字段查询,将不会利用索引)

很明显, 当仅引用索引的第二个列时,优化器使用了全表扫描而忽略了索引。

posted on 2010-01-09 11:12 衡锋 阅读(284) 评论(0)  编辑  收藏 所属分类: Oracle


只有注册用户登录后才能发表评论。


网站导航: