目录
1、通过进行条件加强减少返回记录行
1.1 问题描述
我们有一个定时任务,定时加载满足条件 STATUS IN (‘0’,‘1‘,’2‘) AND booking_time < {一个动态变化的时间} 的订单数据,然后进行状态同步。sql语句如下:
SELECT
*
FROM
flsc_order
WHERE
STATUS IN ( '0', '1', '2' )
AND booking_time < str_to_date( '2022-04-24 23:10:00', '%Y-%m-%d %H:%i:%s' )
ORDER BY
booking_time DESC
执行计划:
1.2 解决方案
进行数据同步,一定要对时间条件进行增加,只加载一周之内的数据,这样,可以保证每次加载的数据不会越来越多,此外,因为按照booking_time进行排序,如果该字段上面没有索引,则一定出出现文件排序 Using filesort。因此,为了让条件查询字段booking_time走索引,同时消除filesort,我们将在booking_time创建一个普通索引。
重写之后的sql如下:
SELECT
*
FROM
flsc_order
WHERE
STATUS IN ( '0', '1', '2' )
AND booking_time < str_to_date( '2022-04-24 23:10:00', '%Y-%m-%d %H:%i:%s' )
and booking_time > str_to_date( '2021-12-14 17:52:14', '%Y-%m-%d %H:%i:%s' )
ORDER BY
booking_time DESC
创建索引如下:
执行计划如下: