<海量数据库解决方案>2011040701

【摘抄】

当组合索引的第一个索引列(通常成为先导列)没有出现在查询条件中时,一般情况下该索引无法被使用。

组合索引最大的缺点就是当职位一部分索引列赋予了查询条件时,或者所用的比较运算符都是非"="比较运算符时效率非常低下。因此,创建创建性的组合索引设计两个重要的方面:第一,基于什么样的列创建索引;第二,按照什么样的顺序创建索引。

1、离散度与列序之间的关系
如果只在"="比较的情况下,离散度的好坏对列的组合顺序并没有什么大的影响。

2、等值比较对列的组合顺序的影响
事实上,对执行速度影响最大的正式使用非等值比较的查询条件。
在没有为组合索引的第一列赋予使用"="比较查询条件时,即使为后面的列赋予了使用"="查询条件也不会缩减数据的查询范围。

结论上说,
在决定组合索引的顺序上,"="比较运算符比离散度更为重要,应当将其放在最优先的位置考虑。
在决定组合索引列序时,应当结合列的离散度和查询条件来决定最佳组合顺序,从而实现组合索引的最大效能

3、In的垫脚石效果
看看书中的例子:
Select * from Tab1
Where col1 = 'a' and col2 = '222'

Tab1索引Index:Col1+Col3+Col2
上面Sql没有Col3的查询条件,其执行效果:没有为Col3赋予查询条件与为Col3服务Col3 Like '%'查询条件具有相同的效果。那么,Col2的查询条件只能其检验作用。

假设Col3的值只有{1,2,3},
那么,Select * From Tab1 Where Col1='a' And Col2 = '222' And Col3 In (1,2,3);
就能解决上述的问题。

4、对查询范围不构成直接影响的列的添加准则
在为某个组合索引选定列时,首先应该考虑的是对直接缩减查询范围起重要作用的列;其次,对附加性列是否会有利于提高执行效率等相关问题进行全面分析。

无论生活、还是技术,一切都不断的学习和更新~~~努力~
原文地址:https://www.cnblogs.com/GoGoagg/p/2007486.html