目录
反思:为什么你的SQL跑得比蜗牛还慢?
明明只是简单的查询,却要等上10秒?
数据量稍微增长,系统就频繁超时?
慢查询是数据库性能的隐形杀手,而90%的问题可通过优化索引和SQL逻辑解决!
今天小编通过10个真实场景的优化方案,手把手带你从执行计划分析到索引设计,彻底告别慢查询!
一、未命中索引:全表扫描的灾难
问题场景
查询用户表中某手机号用户,但执行耗时2秒:
SELECT * FROM users WHERE phone = '13800138000';
分析过程
- 执行
EXPLAIN
查看执行计划:EXPLAIN SELECT * FROM users WHERE phone = '13800138000';
type=ALL
(全表扫描),rows=100000
(扫描10万行)
- 原因:
phone
字段无索引,被迫扫描全表。
优化方案
为phone
字段添加索引:
ALTER TABLE users ADD INDEX idx_phone(phone);
优化效果
- 执行计划变为
type=ref
(索引查找),rows=1
- 查询时间从2秒降至0.01秒
二、索引失效:隐式类型转换陷阱
问题场景
订单表按字符串类型的订单号查询,但索引未生效:
SELECT * FROM orders WHERE order_no = 10086; -- order_no是VARCHAR类型
分析过程
EXPLAIN
结果显示type=ALL
,索引idx_order_no
未命中。
原因:order_no
是字符串类型,但查询条件使用数字,触发隐式转换导致索引失效。
优化方案
保持字