页面打开慢,查出来是某个SQL拖了后腿。你对MySQL有点基础,知道要看EXPLAIN,但type一列写着ALL,rows几万行,Extra里还有个Using filesort——认识每个词,就是不知道从哪下手改。这种时候,AI是个好参谋,但记住它只是参谋,拍板还得你自己来。
第一步把证据收集齐:慢SQL原文、EXPLAIN输出、表结构(SHOW CREATE TABLE)。三样东西一起给AI,它才能给出靠谱建议。只丢一句“我的SQL很慢怎么办”,AI只能给出一堆正确的废话。
-- 慢SQL
SELECT o.order_id, u.nickname, o.amount
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
WHERE o.status = 1 AND o.created_at > '2026-08-01'
ORDER BY o.amount DESC
LIMIT 20;
-- EXPLAIN结果(MySQL 8.0)
+----+-------------+-------+------------+------+---------------+------+---------+------+-------+----------+-----------------------------+
| id | select_type | table | type | key | rows | filtered | Extra |
+----+-------------+-------+------------+------+------+---------+------------------------------+
| 1 | SIMPLE | o | ALL | NULL | 52000| 10.00 | Using where; Using filesort |
| 1 | SIMPLE | u | ALL | NULL | 18000| 10.00 | Using where |
+----+-------------+-------+------------+------+------+---------+------------------------------+
-- 表结构关键部分
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
status TINYINT DEFAULT 1,
amount DECIMAL(10,2),
created_at DATETIME,
KEY idx_user (user_id)
) ENGINE=InnoDB;
AI看到这个组合,大概率会给出这些建议:orders表没走索引(type=ALL)是因为where里只有status和created_at,而索引只建了user_id;status区分度太低,单独建索引没用;最佳方案是建(status, created_at)联合索引,order by的amount会导致filesort,如果过滤后的数据量不大可以接受。它说得对不对?基本对。但你要会自己验证。
-- AI建议:联合索引
ALTER TABLE orders ADD INDEX idx_status_time (status, created_at);
-- 加完索引后重新EXPLAIN,看type和rows变化
EXPLAIN SELECT o.order_id, u.nickname, o.amount
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
WHERE o.status = 1 AND o.created_at > '2026-08-01'
ORDER BY o.amount DESC
LIMIT 20;
-- MySQL 8.0.18+ 可以直接用EXPLAIN ANALYZE看真实执行时间
EXPLAIN ANALYZE SELECT o.order_id, u.nickname, o.amount
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
WHERE o.status = 1 AND o.created_at > '2026-08-01'
ORDER BY o.amount DESC
LIMIT 20;
人工确认的要点:改完索引后EXPLAIN里type从ALL变成ref或range、rows大幅下降、Using filesort消失(或数据量可接受);EXPLAIN ANALYZE显示的实际执行时间比改之前降了一个量级。然后跑一下线上真实查询,看响应时间。最后别忘了——AI的建议基于你给的表结构,如果线上表数据量分布不同,结论可能不一样,一切以实测为准。
这套流程通用性很强:把EXPLAIN输出、表结构、慢SQL打包问AI,拿到建议后自己动手验证。AI帮你省掉查资料的时间,但数据库是你的,加索引会不会锁表、什么时候加、要不要pt-online-schema-change,这些生产决策还得你拍板。
数据来源:MySQL官方文档
A5创业网 版权所有