MySQL问题:MySQL中使用索引一定有效吗?如何排查索引效果
不一定有效,当查询条件中不包含索引列或查询条件复杂且不匹配索引顺序
对于一些小表,MySQL可能选择全表扫描而非使用索引,因为全表扫描的开销可能更小
最终是否用上索引是根据MySQL成本计算决定的,评估CPU和I/O成本
排查索引效果
使用功能Explain命令,使用命令后观察Explain结果中的type(访问类型)、key(使用的索引)、rows(扫描的行数)等
当查询使用索引时,Type一般显示未index或range,如果是ALL,就表示查询执行了全表扫描,没使用索引
使用索引时,Key会显示索引名称,如果是NULL,就表示查询没使用索引
Rows显示了查询扫描的行数,在InnoDB中有时不准
问:假设你有一个查询非常慢,且你已经确定查询使用了一个复合索引,你会如何诊断并优化这个查询?
这个问题可以通过描述排查索引效果的方法来回答
首先可以使用Explain语句来查看查询的执行计划,确认是否使用了正确的索引,其次可以检查是否违反最左匹配原则的情况,调整查询条件的顺序。优化措施包括减少返回的列数,使用覆盖索引。