大家好呀,我是柚子。这篇文章的起因呢,是因为项目中有一个分页查询比较慢的sql需要优化。
分页查询也是我们项目中经常使用的查询方式,那么如何优化呢?
场景:表里有大量数据,一次性查询出来肯定会非常慢,那么考虑使用批量查询的方式。
方法一:根据分页和计算偏移量查询,如每200条分一次页,但是会存在一个问题。如果表里的数据量越大,这种方式会越慢,因为需要计算偏移量。
方法二:根据分页和主键查询,首先查出总记录数,再用总记录数算出分页页数,来循环取出数据。假如是倒序,用每次查出的最后一个主键id,小于这个主键id,每批向前取200条,这样就大大提高sql效率了。
提示:以下是本篇文章正文内容,下面案例可供参考
select * from order where type=1 limit 100000,1;
第1条语句:3674ms
select id from order where type=1 limit 100000,1;
第2条语句:1315ms
select * from order where type=1 and
id>=(select id from order where type=8 limit 100000,1)
limit 100;
第3条语句:1327ms
select * from orders where type=1 limit 100000,100;
第4条语句:3710ms
从上面也是可以看出:
第1条直接select * 的话不走索引,会比较慢
第2条直接查询id,就走了索引,相对比较快
第3条虽然select *,但是先定位偏移位置的id,然后向后查询,也是比较快的
假设数据表的id是连续递增,则根据查询的页数和查询的记录数可以算出查询的id的范围,可使用 id between and:
sql如下(示例):
select *
from order
where type = 1
and id between 1000000 and 1000100
limit 100;
那么以上就是分页查询的优化方式了,小伙伴们可以采纳哦!
╭◜◝ ͡ ◜◝╮
( ˃̶͈◡˂ ̶͈ )感觉有用的话,欢迎点赞评论呀!
╰◟◞ ͜ ◟◞╯