MySQL分页查询详解(3种查询优化语句)

MySQL分页查询详解(3种查询优化语句)-mikechen

一般分页查询

语法格式:

SELECT * FROM table LIMIT stratIndex,pageSize

Limit限制的是从结果集的stratIndex位置处取出pageSize条输出,其余抛弃,stratIndex越大,查询性能就越低。

示例:

select * from table order by id limit 10, 100;

Limit适应场景: 适用于数据量较少的情况,原因是: 全表扫描,速度会很慢。

 

子查询优化

在中小数据量的情况下,这样的SQL就足够了,随着数据量的增多,页数越来越多,查看最后几页的SQL就会很慢。

如下所示:

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 1000, 10

所以,分页越往后,数据量越大,偏移量就可能很大,分页的速度就会变慢,这时用子查询方式来提高分页效率。

如下所示:

SELECT * FROM articles WHERE  id >=  
 (SELECT id FROM articles  WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10

为什么子查询快?

因为子查询是在索引上完成的,而普通的查询是在文件数据文件上完成的。

 

id 限定优化

这种方式假设数据表的id是连续递增的,则我们根据查询的页数和查询的记录数可以算出查询的id的范围,可以使用 id between and 来查询:

select * from orders_history where type=2 and id between 1000000 and 1000100 limit 100;

这种查询方式能够极大地优化查询速度,基本能够在几十毫秒之内完成。

 

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法