日期:2014-05-16  浏览次数:20491 次

复合索引规制

1、复合索引生效规则
查询必须包含这个组合索引中的一个或者多个条件才能生效,而且第一列是必须的。
比如:
create index idx1 on SM_USER (USER_CODE,NAME,ORG_ID)
如下查询索引生效:
select * from SM_USER where USER_CODE = ?
select * from SM_USER where USER_CODE = ? and NAME = ?
多余呢?
排序错误呢?
但是下面的查询就不能使用索引:
select * from SM_USER where NAME = ?
总结:
在创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处
无论您是否经常使用聚合索引的其他列,但其前导列一定要是使用最频繁的列

2、条件顺序
对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高。如:??
IDX1:create?? index?? idx1?? on?? table1(col2,col3,col5)??
select?? *?? from?? table1?? where?? col2=A?? and?? col3=B?? and?? col5=D

3、索引的order by
缺省情况下,索引的列按升序排列
CREATE INDEX idx_example
ON table1 (col1 ASC, col2 DESC, col3 ASC)
索引列????? 可优化的 ORDER BY 查询?? 不可优化的 ORDER BY 查询
ASC、ASC??? ASC、ASC 或 DESC、DESC?? ASC、DESC 或 DESC、ASC
ASC、DESC?? ASC、DESC 或 DESC、ASC?? ASC、ASC 或 DESC、DESC
DESC、ASC?? DESC、ASC 或 ASC、DESC?? ASC、ASC 或 DESC、DESC
DESC、DESC? DESC、DESC 或 ASC、ASC?? ASC、DESC 或 DESC、ASC
生效规则:同索引全相同或者全相反

4、多用窄索引
同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,如果不特殊说明的话一般是指单一索引。宽索引也就是索引列超过2列的索引。
设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效。拥有更多的窄索引,将给优化程序提供更多的选择余地,这通常有助于提高性能。

5、对一张表来说,如果有一个复合索引 on?? (col1,col2),就没有必要同时建立一个单索引 on col1