在日常开发中,SQL 查询性能直接影响到系统的响应速度和用户体验。随着数据量的增长,慢查询可能成为系统的瓶颈。本文将通过实际案例,分享几种常见的 MySQL 查询优化方法,帮助开发者快速定位和优化慢查询,提升数据库性能。
一、慢查询定位与分析
1. 开启慢查询日志
通过开启慢查询日志,可以记录执行时间超过指定阈值的 SQL 查询,帮助分析系统中的瓶颈。
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 1; -- 超过 1 秒的查询会记录
SHOW VARIABLES LIKE 'slow_query_log_file'; -- 查看慢查询日志位置
示例输出(日志格式):
# Time: 2023-12-01T10:05:34
# Query_time: 2.456 Lock_time: 0.002 Rows_sent: 1000 Rows_examined: 500000
SELECT * FROM orders WHERE order_date > '2023-01-01';
二、案例 1:大表全表扫描优化
问题描述
查询订单表 orders
中近一年的订单数据,查询速度缓慢。
SELECT * FROM orders WHERE order_date > '2023-01-01';
分析:
- 订单表数据量庞大,每次查询都进行全表扫描(
EXPLAIN
显示type=ALL
)。 order_date
列没有建立索引。
优化方案:
- 为
order_date
字段添加索引:
ALTER TABLE orders ADD INDEX idx_order_date (order_date);
- 使用覆盖索引查询,避免回表:
SELECT order_id, order_date