Hello! 欢迎来到小浪云!


MySQL 组合索引为何失效?“SELECT *” 查询为何会阻碍索引的使用?


avatar
小浪云 2024-11-11 67

MySQL 组合索引为何失效?“SELECT *” 查询为何会阻碍索引的使用?

mysql 组合索引未生效的分析

问题:

对于拥有主键 A 和组合索引 B、C 的表,为什么 MySQL 无法在查询语句 “select * FROM table where B=1 and C = 2” 中使用该组合索引?

分析:

虽然 gpt 声称该查询可以使用组合索引,但实际情况并非如此。explain 分析显示,该查询没有走索引,而是进行了全表扫描。这是因为:

select * 查询导致索引无效

执行 “SELECT *” 查询时,MySQL 将返回表中的所有列。这导致了对索引的回表操作,因为索引结构中不包含该查询所需的所有数据。回表操作会降低查询性能,并阻止组合索引被有效利用。

解决方案:

要使组合索引生效,需要修改查询以仅选择必要的列。例如,更改为 “SELECT B, C FROM Table where B=1 and C = 2” 可以使 MySQL 使用组合索引来快速获取所需数据,避免回表操作。

相关阅读