读书笔记: 海量数据库解决方案

https://book.douban.com/people/fleure/annotation/5346169/

索引合并和组合索引的比较

  • 索引合并(Index Merge):分别为 col1 和 col2 设置索引,在检索条件中同时提供 col1 和 col2

  • 组合索引(Concatenated Index):为 (col1, col2) 设置索引

<原文开始>只有当合并的索引具有相似的离散度时索引合并才比较有效。</原文结束> <原文开始>在两个索引行数悬殊的情况下,通常只使用其中最好的一个索引负责读取数据,而另外的索引只负责检验即可。</原文结束> 避免优化器坏事,把检索拆成两条 sql。 -------------- <原文开始>只有在查询条件中对索引列使用了等值比较时组合索引才能有突出的表现。</原文结束> <原文开始>当组合索引的第一个索引列(通常称为先导列)没有出现在查询条件时,一般情况下该索引无法被使用。</原文结束> 组合索引相当于对 (col1, col2) 这个元组建索引,col1 依然可以作为比较大小的依据,但是索引的范围变大了,导致查询速度不如直接对 col1 做索引;而只拿 col2 作为检索条件的话,完全没作用。 组合索引只在大量 where col1 = ? and col2 = ? 时有显著效果,也可以加速一点 col1 作为条件的检索,所以组合索引需要注意一下先导列的选择。 此外如果 select 的列中仅包含 col1 和 col2,检索完组合索引就相当于读完了数据。