您的位置:首页 > 数据库 > MySQL

mysql 多列索引和多个单列索引

2013-07-05 11:01 141 查看
对于要经常查询的含量大量数据的数据库,建立索引是非常重要的,建立索引一般都是在where语句用得较多的列上。现在有个问题,如果一个表有多个列需要建立索引,是把所有列建成一个索引,还是对每一个列建一个索引,上篇文章做了一个介绍,这是作者得出的结论,Conclusion: For
benchmarked queries we can see Multiple Column index beats Index Merge in all cases when such index can be used. It is also worth to watchout a MySQL may decide not to do Index merge (either intersection or union) but instead do full table scan or access table
picking only one index on the pair.意思应该是说对多个列建索引比对每个列分别建索引更有优势,而且要知道索引建立得越多就越占磁盘空间,在更新数据的时候速度会更慢。

另外一篇文章How
to create a successful multi-column index 则介绍了如何去建立一个多列索引,最重要的一个问题是如何安排列的顺序是至关重要的,比如需要对一个表里面的两个字段foo,bar建一个索引,那么索引的顺序是(foo,bar)还是(bar,foo)呢。在搞清楚如何安排顺序之前先了解一个概念,cardinality:金山的翻译是"集的势",比如,tb表有1700条记录,foo字段有750个不同的记录,那么就可以说We
have a cardinality of 750 for foo。总规则可以说是cardinality越大的字段应该排在索引的第一位就是说索引的位置是(foo,bar),因为cardinality越大那么第一次取出来的记录集就越小,再进行第二次查询的次数就越少了。不过这只是对于建两个索引的规则,如果是三个以上就没有那么简单了,具体地看原文,有比较详细的例子。还需要提出的是即使我们建了一个很有效的索引,但是查询优化器也许会选择不用它,如果它会考虑更多因素以决定这个索引是否有足够的效率。It
was also pointed out to me, that even if an efficient multi-column index is created, the query optimizer may choose to never use it. This is

because the optimizer looks at further statistics to determine if the index would be

efficient enough or not.

另外,还可以参考一下mysql的官方文档,http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html,也有比较详细的介绍mysql如何使用索引的,只是都是e文,慢慢啃就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: