多列索引和单列索引

时间:2014-07-29 12:11:58

标签: mysql indexing

在mysql索引中

案例1:

   Created the index for two column, but used only one column in where clause.

它会使用索引吗?

案例2:

  Created the index for single column, but used index created column and 
  non-indexed column in where clause.

它会使用索引吗?

索引如何在多列索引中工作?索引如何在where子句中工作。

2 个答案:

答案 0 :(得分:0)

MySQL对documentation中如何使用复合索引有很好的解释。

对于你的问题。

如果您的索引为table(col1, col2),那么该索引通常会用于where上的col1条件,但不会用于col2

This includes both equality and inequality conditions.  It would not be used if `col1` is 
wrapped in a function.

For the second case, the index would normally be used for the condition where it could be 
used. For the second condition, the database engine would look up the records in the table 
and apply the second condition directly on the data.

在某些情况下,使用索引不会比扫描表更快。例如,在一张小桌子上(只有几行)扫描桌面通常会更快。同样,如果索引在表中提取了大量的行,则执行全表扫描可能会更快。

答案 1 :(得分:0)

mysql文档似乎非常清楚:http://docs.oracle.com/cd/E17952_01/refman-5.1-en/mysql-indexes.html

简而言之:

案例1 - 这取决于您是否在where语句中使用索引中最左侧的列。

案例2 - 是的,假设没有其他索引返回更少的行

,将使用索引