问题语句
SELECT*
FROMt_order_log l
WHERE1 = 1
AND l.create_time >= '2024-08-28'
AND l.create_time <= '2024-09-04 23:59:59'
LIMIT 10000,10
上述查询sql,即使create_time字段已建立索引,但偏移量达到几十万时候,查询耗时将近1分钟,还是很久。
优化方案
方案1
根据条件先查询满足条件的的记录的id,再根据id查询对应的数据,优化后耗时降到3秒左右。如下:
select
*
from t_order_log inner join (select id from t_order_log where 1 = 1AND create_time >= '2024-08-28'AND create_time <= '2024-09-04 23:59:59'limit 10000,10
)
l using (id)
方案2
限定只能查短时间内的日志,避免大的偏移量。