mysql limit如何优化

布谷歌 2022-10-12 17:36:47

下面的sql执行需要1.2s

SELECT * FROM sbh_plat_order WHERE state = 3 AND order_end_time BETWEEN '2022-09-01 00:00:00' AND '2022-09-30 23:59:59' 
ORDER BY create_time DESC 
LIMIT 232000,2000

 

然后呢,优化成下面的sql,0.09s就能出结果。

SELECT * FROM sbh_plat_order t1 inner join (
    select id from sbh_plat_order WHERE state = 3 AND order_end_time BETWEEN '2022-09-01 00:00:00' AND '2022-09-30 23:59:59' 
    ORDER BY create_time DESC
) t2 on t1.id = t2.id 
LIMIT 232000,2000

可是,but,发现查询出来的数据却不一致了。 

原因:sbh_plat_order 表里的id与create_time两个字段的值不是正相关的。 就是说,存在下面的记录

t_plat_order
idcreate_time
12022-10-1
22022-10-2
32022-9-1
42022-10-3

 

所以,这么优化是有问题的。那么,我想请教大家的是:我这个sql还有其他优化方式吗? 谁能让它降到一秒,我今天晚上跟谁睡 O(∩_∩)O哈哈~

...全文
90 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

可以配置走聚簇索引, 根据聚簇索引大于等于优化。
影响到服务器这边的查询效率的关键是 这个 offset。
可以通过上面的方式 更新 offset, 达到相同的迭代效果。

我想rua熊猫 2022-10-13
  • 打赏
  • 举报
回复

你那所谓的优化本身就是错的,怎么能用来跟前面的运行时间做对比

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧