Ubuntu 上使用 SQLAdmin 优化查询语句的实操指南
一 工具与定位
SHOW VARIABLES LIKE '%slow_query_log%';、SHOW VARIABLES LIKE 'long_query_time';、SET GLOBAL slow_query_log=ON;、SET GLOBAL long_query_time=2;(生产建议先在测试环境验证)。EXPLAIN SELECT …; 查看执行计划,关注 type(至少达到 range,避免 ALL)、key、rows、Extra 中的 Using filesort、Using temporary 等关键字,以定位全表扫描、排序或临时表问题。二 索引与执行计划优化
YEAR(create_time)=2023)、避免隐式类型转换(如数字列与字符串比较)、减少前导通配符模糊查询(如 LIKE '%abc%' 难以走索引)。ANALYZE TABLE 更新统计信息,必要时用 SHOW INDEX FROM table 检查索引使用率并清理冗余索引。FORCE INDEX/USE INDEX)进行验证,但避免长期依赖。三 SQL 写法与结构优化
SELECT *,只返回必要字段;在仅需一条记录时使用 LIMIT 1;分页避免大偏移(如 LIMIT 10000,10),改用游标分页(WHERE id > last_id ORDER BY id LIMIT 10)。IN 子查询改写为 JOIN 或 EXISTS;OR 条件尽量改为 UNION ALL(前提结果集无重复)。num/2=100 改为 num=200);保持比较双方数据类型一致;使用参数化查询提升计划复用与安全性。四 配置与维护优化
ANALYZE TABLE、OPTIMIZE TABLE 整理统计信息与碎片(注意 InnoDB 在线 DDL 与锁表影响,选择低峰期)。五 快速排查清单与示例
快速清单
EXPLAIN,确认是否出现 ALL/Using filesort/Using temporary;FORCE INDEX 验证;SELECT *→显式列、IN→JOIN/EXISTS、分页改为游标、避免函数/类型转换);innodb_buffer_pool_size、统计信息更新、碎片整理),并在低峰期执行。示例
SELECT * FROM orders WHERE YEAR(create_time)=2023 ORDER BY amount DESC;SELECT id, customer_id, amount FROM orders WHERE create_time >= '2023-01-01' AND create_time < '2024-01-01' ORDER BY amount DESC;INDEX(create_time, amount)(满足最左前缀且覆盖查询列);如仍慢,结合 EXPLAIN 决定是否使用 FORCE INDEX 或改写分页。