假设我在MySQL数据库的表中定义了以下索引:
(col1, col2, col3)
我知道我在(col1)
,(col1, col2)
和(col1, col2, col3)
上获得了索引搜索功能。
我还可以在(col1, col3)
上获得索引搜索功能吗?
答案 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)
上单独建立索引。