03|分页查询优化

1. 根据自增且连续的主键排序

使用条件:主键连续且自增 & 结果按照主键排序

 select * from employees limit 90000,5;

在这里插入图片描述

理论上应该走主键索引, 为什么现在type是 all呢?
● 查询第9w行数据开始的5条数据时属于深度分页。
● limit 90000 5工作原理就是先读取前面90005行记录,舍弃前90000行记录,取5条想要的,
● 查询行数越大,偏移量越大,性能越差。
● 因此这条查询语句type 类型是all使用的全表扫描的方式
没有单独的order by表示通过主键取排序, 并且我们可以看到主键是自增且连续

优化

select * from employees where id > 90000 limit 5;

结论

优化后的 SQL 走了索引,且扫描的行数大大减少,执行效率更高。
但是,这条改写的SQL 主键连续且自增条件苛刻。 在很多场景不适用。 比如我们删除90002行记录, 那么查询90001开始的第行记录就会变成90001, 90003, 90004,90005,90006
且根据1.2的案例我们可以知道 SQL 是 order by 非主键的字段,按照上面说的方法改写会导致两条 SQL 的结果不一致. 所以这种改写得满足以下两个条件:
● 主键自增且连续
● 结果是按照主键排序的

2. 根据非主键字段排序

select * from employees ORDER BY name limit 90000,5;

在这里插入图片描述

分析结果中看到没有使用 name 字段索引(key 字段对应的值为 null)
扫描整个索引并查找到没索引的行(可能要遍历多个索引树)的成本比扫描全表的成本更高,所以优化器放弃使用索引。

优化
关键是让排序时返回的字段尽可能少,所以可以让排序和分页操作先查出主键,然后根据主键查到对应的记录,就是尽量使用覆盖索引减少回表的操作

select * from employees e inner join (select id from employees order by name limit 90000,5) ed
on e.id = ed.id;

结论

查询结果一样, 优化后查询效率更高. 原 SQL 使用的是 filesort 排序,而优化后的 SQL 使用的是索引排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac下使用jadx反编译工具

直接执行步骤: 1.创建 jadx目录 mkdir jadx2.将存储库克隆到目录 git clone https://github.com/skylot/jadx.git 3. 进入 jadx目录 cd jadx 4.执行编译 等待片刻 ./gradlew dist出现这个就代表安装好了。 5.最后找到 jadx-gui 可执行文件,双击两下…

C/C++暴力/枚举/穷举题目(刷蓝桥杯基础题的进!)

目录 前言 一、百钱买百鸡 二、百元兑钞 三、门牌号码(蓝桥杯真题) 四、相乘(蓝桥杯真题) 五、卡片拼数字(蓝桥杯真题) 六、货物摆放(蓝桥杯真题) 七、最短路径(蓝…

Unity中URP实现水体效果(泡沫)

文章目录 前言一、给水上色1、我们在属性面板定义两个颜色2、在常量缓冲区申明这两个颜色3、在片元着色器中,使用深度图对这两个颜色进行线性插值,实现渐变的效果 二、实现泡沫效果1、采样 泡沫使用的噪波纹理2、控制噪波效果强弱3、定义_FoamRange来控制…

自定义神经网络二之模型训练推理

文章目录 前言模型概念模型是什么?模型参数有哪些神经网络参数案例 为什么要生成模型模型的大小什么是大模型 模型的训练和推理模型训练训练概念训练过程训练过程中的一些概念 模型推理推理概念推理过程 总结 前言 自定义神经网络一之Tensor和神经网络 通过上一篇…

yolov8添加注意力机制模块-CBAM

修改 在tasks.py(路径:ultralytics-main/ultralytics-main - attention/ultralytics/nn/tasks.py)文件中,引入CBAM模块。因为yolov8源码中已经包含CBAM模块,在conv.py文件中(路径:ultralytics-…

业务流程管理系统(BPMS):一文掌握,组织业务流程优化必备。

大家好,我是大美B端工场,本期继续分享商业智能信息系统的设计,欢迎大家关注,如有B端写系统界面的设计和前端需求,可以联络我们。 一、什么是BPMS系统 BPMS是Business Process Management System(业务流程管…

学习Python分支结构不走弯路

1.单分支语句 """ 语法: if 表达式:执行语句 执行流程:当表达式成立的时候,执行语句,否则不执行 """age int(input(请输入你的年龄:)) if age > 18:print(欢迎光临!) …

二进制部署k8s集群之cni网络插件

目录 k8s的三种网络模式 pod内容器之间的通信 同一个node节点中pod之间通信 不同的node节点的pod之间通信 flannel网络插件 flannel的三种工作方式 VxLAN host-GW UDP Flannel udp 模式 Flannel VXLAN 模式 flannel插件的三大模式的总结 calico网络插件 k8s 组网…

ABC342 A-G

HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342) - AtCoder 被薄纱的一场 A - Yay! 题意: 给出一串仅由两种小写字母构成的字符串,其中一种小写字母仅出现一次,输出那个仅出现一次的小写字母的位置…

PyTorch概述(五)---LINEAR

torch.nn.Linear torch.nn.Linear(in_features,out_features,biasTrue,deviceNone,dtypeNone) 对输入的数据应用一个线性变换: 该模块支持TensorFLoat32类型的数据;在某些ROCm设备上,使用float16类型的数据输入时,该模块在反向传…

文本左右对齐

题目链接 文本左右对齐 题目描述 注意点 words[i] 由小写英文字母和符号组成每个单词的长度大于 0,小于等于 maxWidth输入单词数组 words 至少包含一个单词要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格…

Unity中URP实现水体(水下的扭曲)

文章目录 前言一、使用一张法线纹理,作为水下扭曲的纹理1、在属性面板定义一个纹理,用于传入法线贴图2、在Pass中,定义对应的纹理和采样器3、在常量缓冲区,申明修改 Tilling 和 Offset 的ST4、在顶点着色器,计算得到 应…

目标检测开源数据集——太阳能板缺陷

简介 太阳能板,也称为太阳能电池板,是一种将太阳能转化为电能的设备。它的主要作用包括: 提供电力:太阳能板通过吸收阳光,将其转化为直流电,这种电能可以被各种设备使用。例如,它可以为家庭、…

重生奇迹MU职业排行

1、魔法师:魔法师是奇迹MU中最具实力的职业之一,他们拥有顶级的范围输出能力,同时还具备不错的控制技能。此外,魔法师还具有位移和护盾保命技能,技能伤害非常高,使其在游戏中具有很高的生存和攻击能力。 2…

第十四章 Linux面试题

第十四章 Linux面试题 日志t.log(访问量), 将各个ip地址截取,并统计出现次数,并按从大到小排序(腾 讯) http://192. 168200.10/index1.html http://192. 168.200. 10/index2.html http:/192. 168 200.20/index1 html http://192. 168 200.30/…

【Redis】搞懂过期删除策略和内存淘汰策略

1、过期删除策略 1.1、介绍 Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。 每当我们对一个 key 设置了过期时间时,Redis 会把该 key 带上过期时间存储到一个过期字典…

【Web】CTFSHOW 常用姿势刷题记录(全)

目录 web801 web802 web803 web804 web805 web806 web807 法一:反弹shell 法二:vps外带 web808 web809 web810 web811 web812 web813 web814 web815 web816 web817 web818 web819 web820 web821 web822 web823 web824 web825…

软考45-上午题-【数据库】-数据操纵语言DML

一、INSERT插入语句 向SQL的基本表中插入数据有两种方式: ①直接插入元组值 ②插入一个查询的结果值 1-1、直接插入元组值 【注意】: 列名序列是可选的,若是所有列都要插入数值,则可以不写列名序列。 示例: 1-2、插…

yolov8学习笔记(一)网络结构

一、yolov8.yaml YOLOv8详解 【网络结构代码实操】: YOLOv8详解 【网络结构代码实操】-CSDN博客文章浏览阅读10w次,点赞559次,收藏2.9k次。YOLOv8 算法的核心特性和改动可以归结为如下:提供了一个全新的 SOTA 模型,包…

#LLM入门|Prompt#1.8_聊天机器人_Chatbot

聊天机器人设计 以会话形式进行交互,接受一系列消息作为输入,并返回模型生成的消息作为输出。原本设计用于简便多轮对话,但同样适用于单轮任务。 设计思路 个性化特性:通过定制模型的训练数据和参数,使机器人拥有特…