我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL 分页查询的优化技巧

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL 分页查询的优化技巧

在有分页查询的应用中,包括 LIMIT 和 OFFSET 的查询十分常见,而且几乎每个都会有一个 ORDER BY 子句。如果使用索引排序的话将对性能优化十分有帮助,否则服务端需要做很多文件排序。

一个高频的问题是 offset 的值过大。如果查询类似 LIMIT 10000, 20,将会产生10020行,并将之前的10000行丢弃,这样的代价很高。假设所有的页使用相同的频次访问,这样的查询将平均扫描一半数据表。为了优化他们,你可以在分页视图中限制最多可访问的页数,或者让大便宜的查询更有效。

一个改善性能简单的技巧是在覆盖索引上进行查询操作而不是整行数据。你可以将结果与完整的行做一次联合然后再获取额外需要的列。这样的效率会更高,例如下面的查询:


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

如果数据表很大的话,则可以按下面的方式进行优化:


SELECT film.film_id, film.description
FROM sakila.film
	INNER JOIN (
    SELECT film_id FROM sakila.film
    ORDER BY title LIMIT 50, 5)
  ) as lim USING(film_id);

这种“推断联合查询”能够有效工作是因为它使用了索引减少了服务端尽可能少地访问数据行去检查数据。一旦复核要求的行查到了,将他们与对应的数据表的行进行联合查询以获取对应行的其他列。

有些时候也可以将 limit 转换为固定位置的查询,这种方式可以对索引进行范围扫描完成。例如,如果你预先计算一个固定位置的列 称之为 position,可以重写查询如下:


SELECT film_id, description FROM sakila.film
WHERE position BETWEEN 50 AND 54 ORDER BY position;

排序的数据也可以使用类似的方式解决,但是通常会被 GROUP BY操作影响。大部分情况下需要提前计算和存储排序值。

LIMIT 和 OFFSET 真正的问题是在OFFSET,这意味着服务端会把很多数据行丢弃。如果使用一个有序书签来记录下次获取行的位置的话,则可以从上次的位置开始访问接下来的数据。例如,如果你需要对出租记录进行分页,从最新的出租记录开始往回查询,则可以依赖于记录的主键是一直增加的,因此可以对第一页数据这样查询:


SELECT * FROM sakila.rental
ORDER BY rental_id DESC LIMIT 20;

这个查询返回16049到16030之间的数据。接下来的查询可以从之前结束位置开始:


SELECT * FROM sakila.rental
WHERE rental_id < 16030 
ORDER BY rental_id DESC LIMIT 20;

这个技巧不管你从多远的偏移值开始查询都是很有效的。

其他的一些技巧包括使用预先计算的统计值,或者通过联合冗余了主键和排序列的数据表进行查询,这两种方式都是通过空间换取时间的方式提高查询效率。

以上就是MySQL 分页查询的优化技巧的详细内容,更多关于MySQL 分页查询的优化的资料请关注自学编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL 分页查询的优化技巧

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 分页查询的优化技巧

在有分页查询的应用中,包括 LIMIT 和 OFFSET 的查询十分常见,而且几乎每个都会有一个 ORDER BY 子句。如果使用索引排序的话将对性能优化十分有帮助,否则服务端需要做很多文件排序。一个高频的问题是 offset 的值过大。如
2022-05-20

MySQL优化LIMIT分页查询

在MySQL中,使用LIMIT关键字进行分页查询时,如果查询结果集很大,可能会导致性能问题。为了优化LIMIT分页查询,可以采用以下方法:使用索引:确保查询中涉及到的列都已经建立了索引,这样可以大大提高查询速度。同时,尽量避免在WHERE子
MySQL优化LIMIT分页查询
2024-10-20

MySQL查询优化技巧有哪些

使用索引:确保数据库表的字段都有合适的索引,这样可以加快查询的速度。避免查询所有字段:只选择需要的字段进行查询,避免查询过多无用字段。使用JOIN语句:合理使用JOIN语句可以减少查询次数,提高查询效率。避免使用SELECT :尽量避免使用
MySQL查询优化技巧有哪些
2024-04-09

MySQL查询性能优化的实战技巧

MySQL查询性能优化是一个复杂的过程,涉及到多个方面。以下是一些实战技巧,可以帮助你提高MySQL查询的性能:使用索引:索引是提高查询性能的关键。确保在经常用于查询的列上创建索引,并且索引应该是有意义的,即索引列应该是有序的。同时,要注意
MySQL查询性能优化的实战技巧
2024-10-21

mysql优化之慢查询分析+explain命令分析+优化技巧总结

分析慢查询1.查看慢SQL是否启用,查看命令:show variables like log_slow_queries; 如果结果为ON则是开启了,如果为OFF则表示禁用了。2.开启慢查询命令:set global log_slow_q
2023-02-18

MySQL的查询优化技巧能否用于HBase

MySQL的查询优化技巧主要是针对关系型数据库的,而HBase是一个基于Hadoop的分布式、可扩展、高可靠性的大数据存储系统,它采用了列式存储和分布式架构。虽然MySQL和HBase在数据存储和处理上有很多不同之处,但它们在查询优化方面还
MySQL的查询优化技巧能否用于HBase
2024-10-19

技术分享 | MySQL 子查询优化

作者:胡呈清爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。有这
技术分享 | MySQL 子查询优化
2016-07-07

SQL级别查询优化技巧

使用索引:确保数据库表中经常使用的列上创建了索引,这样可以加快查询速度。避免使用 SELECT *:只选择需要的列,避免选择整个表中的所有列来提高查询效率。使用 WHERE 子句过滤数据:在查询中尽量使用 WHERE 子句来过滤数据,减少需
SQL级别查询优化技巧
2024-08-12

mysql排序分页优化的技巧有哪些

以下是一些优化MySQL排序和分页的技巧:1. 使用索引:在排序和分页查询中,合适的索引可以大大提高查询性能。确保在排序和分页的列上添加索引。2. 使用覆盖索引:如果查询只需要从索引中获取数据而不需要访问表中的其他列,可以使用覆盖索引来提高
2023-10-23

Couchbase的查询优化技巧有哪些

使用索引:在Couchbase中,可以为需要经常查询的字段创建索引,以提高查询性能。确保在设计文档和查询语句时考虑到索引的使用。避免全文扫描:尽量避免在大数据集上进行全文扫描操作,这会消耗大量性能和资源。使用合适的查询条件和索引来限制数据集
Couchbase的查询优化技巧有哪些
2024-04-09

mysql分页查询优化的方法是什么

MySQL分页查询的优化方法包括:1. 使用索引:在进行分页查询时,使用合适的索引可以大大提高查询性能。可以创建适当的索引,以确保查询中使用的列能够被快速定位和检索。2. 优化查询语句:通过优化查询语句的编写,可以减少查询的时间和资源消耗。
2023-10-08

编程热搜

目录