2025年09月09日/ 浏览 10
当数据库响应时间超过500ms时,我们通常将其定义为慢SQL。这类查询如同毛细血管中的血栓,会逐渐阻塞整个系统的运行。某电商平台曾因一个未优化的商品检索SQL,导致大促期间数据库CPU飙升至95%,直接损失超300万订单。
pt-query-digest
工具分析TOP20问题SQLsql
EXPLAIN FORMAT=JSON
SELECT * FROM orders WHERE user_id=1000 AND create_time>'2023-01-01';
重点关注:
– type列:ALL表示全表扫描,index表示索引扫描
– key列:实际使用的索引名称
– rows列:预估扫描行数
– Extra列:Using filesort、Using temporary需要警惕
(user_id, create_time)
时,必须先按user_id排序sql
— 反例:使用OR导致索引失效
SELECT * FROM products WHERE status=1 OR price>100;
— 正例:改写为UNION ALL
SELECT * FROM products WHERE status=1
UNION ALL
SELECT * FROM products WHERE price>100 AND status!=1;
pt-index-usage
分析索引使用率某金融系统账户查询接口优化过程:
1. 原SQL:SELECT * FROM transactions WHERE account_no LIKE '%8888%'
2. 问题诊断:模糊查询导致全表扫描
3. 优化方案:
– 建立倒排索引account_no_reverse
– 改写为WHERE REVERSE(account_no) LIKE REVERSE('%8888')
4. 效果:查询耗时从8264ms降至76ms
通过建立系统化的慢SQL治理机制,某跨境电商平台将数据库平均响应时间从1.2s降至180ms,服务器成本降低40%。这印证了数据库优化带来的巨大经济效益。