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

【摘抄】

为了实现以最少的索引满足对某个表的多样化的数据读取要求,应当为每个索引分配合理的任务,通过为索引分配任务可以在很大程度上提高索引的灵活度。(个人在此认为:索引任务应该指的是用于查询驱动还是查询检验)为了实现该项操作需要考虑:1,允许的情况下,对具有较好离散度的列单独建立索引,可提高该索引的使用弹性(个人建议:一般都是指表关键字索引)2、对于离散度较差的列,通过对多个列合理的组合来创建组合索引,来发挥多个列的综合效益(这类一般用于模糊查询)

索引之间是有竞争的,同时相互影响~

索引合并和组合索引

什么是索引合并?
如果很容易分辨查询条件的优劣,只需选择最好的一个作为驱动查询条件;反之,就考虑多列相互组合来共同负责数据的读取任务,这就是索引合并(index merge)
eg.
Select * from TAB1
Where Col1 = 'abc' And Col2 = 123

此表索引为
Index1:Col1
Index2:Col2

读取模拟:先从Col1中随机读取满足abc的,以达到缩减查询数据的目的。再在结果集中根据Col2来读取满足123的数据。

此过程采用的Index Scan。

只有当合并的索引具有相似的离散度时索引合并才比较有效。建议:在两个索引行数悬殊的情况下,通常只使用其中最好的一个索引来负责读取数据,而另外的索引只负责检验即可。

什么是组合索引?
指基于多列所创建的索引。

索引合并和组合索引在处理上,前者是"Z"字扫描多个索引,后者是"1"字扫描索引。效率上看,后者似乎更有优势。其实不是这样的,还得看查询的条件和离散度。

原文地址:https://www.cnblogs.com/GoGoagg/p/2003106.html