2016 - 2024

感恩一路有你

sql分页查询语句limit 为什么MySQL在数据库较大的时候分页查询很慢,如何优化?

浏览量:3026 时间:2021-03-15 22:05:05 作者:admin

为什么MySQL在数据库较大的时候分页查询很慢,如何优化?

使用合理的分页方式以提高分页的效率


正如楼主所说,分页查询在我们的实际应用中非常普遍,也是最容易出问题的查询场景。比如对于下面简单的语句,一般想到的办法是在name,age,register_time字段上创建复合索引。这样条件排序都能有效的利用到索引,性能迅速提升。

如上例子,当 LIMIT 子句变成 “LIMIT 100000, 50” 时,此时我们会发现,只取50条语句为何会变慢?


原因很简单,MySQL并不知道第 100000条记录从什么地方开始,即使有索引也需要从头计算一次,因此会感觉非常的慢。

通常,我们在做分页查询时,是可以获取上一页中的某个数据标志来缩小查询范围的,比如时间,可以将上一页的最大值时间作为查询条件的一部分,SQL可以优化为这样:


若对你有所帮助,欢迎点赞、关注支持哦。

高效的mysql分页方法及原理?

一,最常见MYSQL最基本的分页方式:

select * from content order by id desc limit 0, 10

在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引。随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

select * from content order by id desc limit 10000, 10

就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。

此时,可以通过2种方式:

一,子查询的分页方式来提高分页效率,飘易用的SQL语句如下:

SELECT * FROM content WHERE id> (SELECT id FROM content ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) ORDER BY id desc LIMIT $pagesize

为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。(via)通过explain SQL语句发现:子查询使用了索引!

id select_type table type possible_keys key key_len ref rows Extra

1 PRIMARY content range PRIMARY PRIMARY 4 NULL 6264 Using where

2 SUBQUERY content index NULL PRIMARY 4 NULL 27085 Using

sql分页查询语句limit mysql分页的几种方式 mysql 分页查询优化

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。