SQL优化之深度分页优化

news/2024/9/22 19:24:04/

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

//查询第 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.ppmy.cn/news/1528975.html

相关文章

Python 二级考试

易错点 电脑基础知识 定义学生关系模式如下:Student (S#, Sn, Ssex,class,monitorS#)(其属性分别为学号、学生名、性别、班级和班长学号) 在关系模式中,如果…

Spring Boot-定时任务问题

Spring Boot 定时任务问题及其解决方案 1. 引言 在企业级应用中,定时任务是一项常见需求,通常用于自动化执行某些操作,如数据备份、日志清理、系统监控等。Spring Boot 提供了简洁易用的定时任务机制,允许开发者通过简单的配置来…

Python计算机视觉第十章-OpenCV

目录 10.1 OpenCV的Python接口 10.2 OpenCV基础知识 10.2.1 读取和写入图像 10.2.2 颜色空间 10.2.3 显示图像及结果 10.3 处理视频 10.3.1 视频输入 10.3.2 将视频读取到NumPy数组中 10.4 跟踪 10.4.1 光流 10.4.2 Lucas-Kanade算法 10.1 OpenCV的Python接口 O…

【算法业务】互联网风控业务中的拒绝推断场景算法应用分享(涉及半监督算法、异常检测、变分自编码、样本权重自适应调整、迁移学习等)

1. 业务目标和任务描述 该项目是很早期的一个工作,属于互联网信贷风控场景,研究并应用信贷中的拒绝推断任务,处理方式也许对于目前的一些业务还有参考意义,因此这里做下分享。拒绝推断是指在信贷业务中,利用已知的接受…

Vue2学习笔记(02条件渲染 、监视数据的原理)

1、v-if和v-show的区别 2、Vue监视数据的原理

SystemVerilog中的Semaphores

SystemVerilog中Semaphore(旗语)是一个多个进程之间同步的机制之一,这里需要同步的原因是这多个进程共享某些资源。 举一个场景:SoC中的,CPU和DMA都希望去访问相同地址的内存空间。实际的情况可能是CPU的访问覆盖DMA的访问&#x…

linux系统蓝牙框架

一、前言 本文主要从大框架上介绍linux系统蓝牙功能架构,包括硬件架构以及软件架构。本文将从如下方面展开: 1.硬件选型及连接 2.软件架构。 二、硬件架构及连接 市面上带蓝牙功能的消费电子主要是采用soc 无线模组的硬件架构。很多无线模组都集成了…

人话学Python-循环语句

一&#xff1a;while语句 while语句的组成由判断条件和执行语句组成。当满足条件时会不断执行后续语句&#xff0c;然后再循环执行的语句结束之后再次回到条件判断&#xff0c;如此循环。 pos 0 ans 0 while pos < 6:ans pos * 4pos 1 print(ans)>>>84"&…