MySQL中使用未使用索引列的多列索引行为

时间:2015-03-10 21:27:08

标签: mysql sql query-optimization

假设我在MySQL数据库的表中定义了以下索引:

(col1, col2, col3)

我知道我在(col1)(col1, col2)(col1, col2, col3)上获得了索引搜索功能。

我还可以在(col1, col3)上获得索引搜索功能吗?

2 个答案:

答案 0 :(得分:1)

这是我使用MSSQL的经验所以请用MySQL测试

考虑(col1,col2,col3)

上的复合索引

您可以获得索引:
COL1
col1& COL2
col1& col2& COL3

在col2和col3上,您可以获得索引(而不是表格)扫描 由于索引小于表格,因此可以帮助搜索时间 有时这是一个重大影响。

对col1和col3的搜索(希望)是col1上的索引搜索和col3上的索引扫描。

请注意,如果表格很小,您将获得一些默认计划 需要加载一些数据来测试

答案 1 :(得分:0)

从评论中总结Marc B的答案:

您无法从索引(col1, col3)获取(col1, col2, col3)的完整索引搜索功能;但是,您仍然可以从查询的(col1)部分的第一级匹配中获得具有索引​​搜索功能的col1索引的好处。然后将在col3上使用表扫描。

如果必须在(col1, col3)上拥有完整的索引搜索功能(可能不是 - 请参阅Eugen Rieck的评论),您需要在(col1, col3)上单独建立索引。