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

Multi-Column Index Behavior in MySQL with Unused Index Column

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

(col1, col2, col3)

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

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

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

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

上使用 table 扫描

如果需要在 (col1, col3) 上具有完整的索引搜索功能(可能不需要 - 请参阅 Eugen Rieck 的评论),您需要在 (col1, col3).[=17= 上建立单独的索引]

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

进行测试

考虑 (col1, col2, col3) 的复合索引

您在以下位置进行索引查找:
col1
col1 & col2
col1 & col2 & col3

在 col2 和 col3 上你可以获得索引(不是 table)扫描。
由于索引小于 table,这有助于搜索时间。
有时这是一个重大影响。

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

请注意,如果 table 很小,您只会得到一些默认计划
需要加载一些数据来测试