MySQL分页查询的SQL优化,950W+数据查询时间从17s到350ms
有一张订单表,未进行分库分表,目前的数据量为9686697,使用了limit分页查询,SQL语句如下:
SELECT 查询字段
FROM `table_name`
WHERE 查询条件
LIMIT 0,10;
查询耗时:16 s 947 ms (execution: 16 s 835 ms, fetching: 112 ms)。
优化操作:
查询条件放到子查询中,子查询只查主键ID,然后使用子查询中确定的主键关联查询其他的属性字段;减少回表操作,利用延迟关联或者子查询优化超多分页场景。
SELECT 查询字段
FROM `table_name` AS main_tale
RIGHT JOIN
(
SELECT 子查询只查主键
FROM `table_name`
WHERE 查询条件
LIMIT 0,10
) AS temp_table ON temp_table.主键 = main_table.主键;
按照以上调整SQL后,查询耗时:348 ms (execution: 162 ms, fetching: 186 ms)。