首页 > 其他分享 >分页查询优化

分页查询优化

时间:2022-12-08 17:03:31浏览次数:44  
标签:分页 查询 ID id post 优化 discuss SELECT 300000

看原始的SQL语句

SELECT * FROM `discuss_post` limit 300000,5

另外可以看到这里并没有走索引

比如这里会查询前300005条数据,然后丢掉前面的300000条数据

对于ID自增

可以利用主键索引

SELECT * FROM `discuss_post` where id> 300000 limit 5

性能提升还是比较明显

可以看到是走了主键索引,涉及的行数也大幅下降

SELECT * FROM `discuss_post` where id between 300000 and 300005

用BETWEEN也是差不多的效果,他俩本质上没有区别
BETWEEN是包含边界条件的,所以这里查出来会比上面多一条

但是这两种方式也有明显的弊端,要求ID为递增数字而且中间不能有断裂

limit ID

SELECT * FROM `discuss_post` where id >(SELECT id from `discuss_post` LIMIT 300000,1) limit 5

虽然仍然有大量丢弃,但是只查了ID字段,所以查询和丢弃的数据其实已经少了很多

效率可以做到和上面差不多,但是没有了对ID字段的限制,不要求是递增的数字,也不要求没有断裂

内层不走主键索引,但是外层走

延迟关联

SELECT * FROM `discuss_post`JOIN (SELECT id from `discuss_post` LIMIT 300000,5) as x USING(id)

模板是这样的

SELECT <cols> FROM profiles JOIN(
    SELECT <primary key cols> FROM profiles
    WHERE ... LIMIT 1000000,5
)AS x USING(<primary key cols>);

USING关键字相当于ON

标签:分页,查询,ID,id,post,优化,discuss,SELECT,300000
From: https://www.cnblogs.com/yaocy/p/16966404.html

相关文章