当前位置: 首页 > news >正文

SQL优化之深度分页优化

        深度分页是指在分页查询场景下,当数量很大时,随着页数的增大,查询会变得越慢,数据库在梳理分页查询时需要跳过大量的数据,降低查询效率。

//查询第 1 到第 20 条商品
select * from products limit 20 offset 0;
select * from products limit 20;

        此时只需从数据库中查询20条数据,速度很快。

//查询第 19981 到第 20000 条商品
select * from products limit 20 offset 19980;
select * from products limit 199980,20;

        此时数据库需要查询第19981到2000条商品的数据,但是需要跳过前面近两万条的数据,导致了额外的查询耗时,虽然只查询出20条数据,但是数据库需要扫描更多的数据。

深度分页优化思路:

  1. 优化查询语句,通过筛选条件来限制查询的范围,以此来减少查询到的数据量大小,故可以通过优化查询语句,细化查询的粒度,尽可能多的查询到与业务相关性高的数据,减少查询到的数据量。
  2. 基于索引进行分页,如select * from products limit 199980,20; 这个sql是要查询第[19981-20000]的数据,可以通过主键或索引字段进行分页,避免数据库扫描大量不需要的记录,优化成:select * from products where id > 199980,通过添加查询条件走索引来查询,可以提高搜索的性能。
  3. 限制分页深度,避免过度的分页,因为分的页面越大,内容相关度就会越低,因此页面太大对业务价值不高,比如最多就分100页,因为在实际业务场景中,用户一般不会查询到很深的页,比如淘宝查询某件商品,用户最多翻100页就完成了业务,因此不用分太多的页。
  4. 使用 Elasticsearch搜索引擎来进一步的优化
  5. ☆☆延迟游标分页☆☆(下一篇文章中会具体讲解~~)

        总结:深度分页优化的核心思路是避免大量不必要的查询,提高查询的效率。


http://www.mrgr.cn/news/31856.html

相关文章:

  • redisson内存泄漏问题排查
  • 初识Linux · 信号保存
  • UEFI PEI阶段的一些基本概念
  • FlinkSql读取kafka数据流的方法(scala)
  • 推荐一款优秀的Flash幻灯片制作软件:Flash Gallery Factory
  • 在Node.js中如何使用TypeScript
  • linux安装nginx+前端部署vue项目(实际测试react项目也可以)
  • 模板初阶
  • 自闭症能上寄宿学校吗?了解解答与选择
  • PLC中几个电机控制电路
  • IDA Pro基本使用
  • 【Linux】简易日志系统
  • 剑指offer JZ54 二叉搜索树的第k个节点
  • python+selenium实现自动联网认证,并实现断网重连
  • 读取ply文件中的点云属性
  • vue3 TagInput 实现
  • 如何把python(.py或.ipynb)文件打包成可运行的.exe文件?
  • 毕业季,论文的开题报告对大学生来说意味着什么?
  • ESP32调用本地部署的ChatTTS
  • C++第1课——输出、变量和输入(含视频讲解)
  • 我与Linux的爱恋:命令行参数|环境变量
  • 2024CSP-J初赛
  • string类(C++)
  • LeetCode 滑动窗口 最少交换次数来组合所有的 1 II
  • 湖北师范大学-Java入门 - 分支结构
  • 基于单片机汽车驾驶防瞌睡防疲劳报警器自动熄火设计