300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql 利用延迟关联优化查询(select * from your_table order by id desc limit 2000000 20)

mysql 利用延迟关联优化查询(select * from your_table order by id desc limit 2000000 20)

时间:2023-04-22 04:47:40

相关推荐

mysql 利用延迟关联优化查询(select * from your_table order by id desc limit 2000000 20)

其实在我们的工作中类似,select * from your_table order by id desc limit 2000000,20会经常遇见,比如在分页中就很常见。

如果我们的sql中出现这样的查询(比如:点击查看“末页”),那是相当恐怖的(等待时间会很长)。该sql是一个非常典型的排序+分页查询:order by col limit N,OFFSET M, MySQL 执行此类sql时需要先扫描到N行,然后再去取 M行。对于此类大数据量的排序操作,取前面少数几行数据会很快,但是越靠后,sql的性能就会越差,因为N越大,MySQL 需要扫描不需要的数据然后在丢掉,这样耗费大量的时间。

【分析】

针对limit 优化有很多种方式,

1 前端加缓存,减少落到库的查询操作

2 优化SQL

3 使用书签方式 ,记录上次查询最新/大的id值,向后追溯 M行记录。

4 使用Sphinx 搜索优化。

对于第二种方式 我们推荐使用"延迟关联" (deferred join) 的方法来优化排序操作,何谓"延迟关联" :通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。

【解决】

根据延迟关联的思路,修改SQL 如下:

select a.* from your_table a,(

select id from your_table where (这里的where条件根据具体情况具体编写) order by id desc limit 2000000,20

) b where a.id = b.id

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。