我最近一直在读MySQL中的索引,其中一些原则非常简单,但有一个概念仍然困扰着我:基本上,假设在一个假设表中,假设有10列,我们有两个单列索引(分别针对column01和column02 ),加上一个主键列(其他一些列),那么它们是否会用于像这样的简单SELECT查询:
SELECT * FROM table WHERE column01 = 'aaa' AND column02 = 'bbb'
看着它,我的第一个直觉告诉我,第一个索引将检索满足第一个条件的一组行(或者InnoDB中的主键,如果我没弄错的话),第二个索引将检索另一组行。最终的结果集就是这两者的交集。在我读过的书中,我找不到关于这个特定场景的任何东西。当然,对于这个特定的查询,两个列上的一个索引似乎是最好的选择,但是如果我尝试使用上面描述的两个索引,我就很难理解整个过程背后的真正过程。
发布于 2011-01-26 02:48:29
它只会使用一个索引。如果您希望它能够索引您正在测试的每一列,则需要创建一个包含多个列的复合索引。您可能想要阅读manual以了解MySQL如何使用每种类型的索引,以及如何正确地对复合索引进行排序以获得最好的利用。
发布于 2011-01-26 02:49:16
这实际上是关于索引最常见的问题:使用一个包含所有列的索引还是为每个列使用一个单独的索引更好?
http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/index-combine-performance
https://stackoverflow.com/questions/4797522
复制相似问题