mysql优化-limit分页优化

本文介绍了一种优化LIMIT分页查询的方法,通过使用延迟关联和覆盖索引扫描来提高查询效率,减少MySQL在处理大量数据时的负担。

优化LIMIT分页

当需要分页操作时,通常会使用LIMIT加上偏移量的办法实现,同时加上合适的ORDER BY字句。如果有对应的索引,通常效率会不错,否则,MySQL需要做大量的文件排序操作。

一个常见的问题是当偏移量非常大的时候,比如:LIMIT 10000 20这样的查询,MySQL需要查询10020条记录然后只返回20条记录,前面的10000条都将被抛弃,这样的代价非常高。

优化这种查询一个最简单的办法就是尽可能的使用覆盖索引扫描,而不是查询所有的列。然后根据需要做一次关联查询再返回所有的列。对于偏移量很大时,这样做的效率会提升非常大。考虑下面的查询:

SELECT film_id,description FROM film ORDER BY title LIMIT 50,5;

如果这张表非常大,那么这个查询最好改成下面的样子:

SELECT film.film_id,film.description
FROM film INNER JOIN (
 SELECT film_id FROM film ORDER BY title LIMIT 50,5
) AS tmp USING(film_id);

这里的延迟关联将大大提升查询效率,让MySQL扫描尽可能少的页面,获取需要访问的记录后在根据关联列回原表查询所需要的列。

有时候如果可以使用书签记录上次取数据的位置,那么下次就可以直接从该书签记录的位置开始扫描,这样就可以避免使用OFFSET,比如下面的查询:

SELECT id FROM t LIMIT 10000, 10;

改为:

SELECT id FROM t WHERE id > 10000 LIMIT 10;
MySQL中,LIMIT是一种用于分页查询的优化技术。它可以限制查询结果集的返回行数。根据引用\[2\],如果你只需要返回结果集中的特定几行数据,通常使用LIMIT而不是取回整个结果集再舍去不需要的数据。这样可以减少数据传输和处理的开销。 在引用\[1\]中提到,随着查询结果集的增大,未经优化的SQL语句的执行时间会显著增加。而经过优化的SQL语句在相同条件下执行时间较短。这是因为优化后的SQL语句只返回需要的行数,而不会取回整个结果集。 为了进一步优化分页查询,可以使用OFFSET和LIMIT结合使用。OFFSET用于指定查询结果集的起始位置,而LIMIT用于指定返回的行数。通过使用OFFSET和LIMIT,可以避免取回不需要的数据,提高查询效率。 根据引用\[3\]的示例,可以将SQL语句修改为类似以下的形式: SELECT * FROM table_name LIMIT offset, limit; 其中,offset表示起始位置,limit表示返回的行数。 总结起来,MySQL中的LIMIT分页优化技术可以通过限制返回结果集的行数,减少数据传输和处理的开销。使用OFFSET和LIMIT结合使用可以进一步优化分页查询,避免取回不需要的数据,提高查询效率。 #### 引用[.reference_title] - *1* *2* [MySQL中的limit分页优化](https://blog.youkuaiyun.com/coco3600/article/details/100232404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MySQL分页你还在使劲的limit?](https://blog.youkuaiyun.com/qq_21454973/article/details/125935012)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值