从深分页查询到覆盖索引

news2025/7/11 5:29:34

最近看到一道面试题,如何优化深分页查询
最简单的例子是

select  * from web_bill_main
limit 30000,10;

分页达到30000行,需要把前面29999行都过滤掉,才能找到这10条数据
所以整体时间花了80ms(工具显示时间)

我当时的第一反应是,使用in

select * from web_bill_main 
where id in 
(select id from web_bill_main limit 30000,10)

很遗憾,报错了
在这里插入图片描述

然后想到使用left join

select w.* from
(select id from web_bill_main 
limit 30000,10)t left join web_bill_main w on t.id = w.id

速度提升至15ms

正当我洋洋得意时,发现问题的不对劲,速度是提升了,但是返回数据不一样

此时我发现,以下两个sql返回数据的id不一致

select id from web_bill_main
select  * from web_bill_main

select * from web_bill_main查询到的是根据ID进行排序的数据
select id from web_bill_main查询出来的ID并不有序

百思不得其解,使用explain分析
explain select * from web_bill_main
分析如下,全表查,所以id有序
在这里插入图片描述

explain select id from web_bill_main
分析如下,没有使用id索引,而是使用了idx_modify_time,mysql除了主键索引,都是联合索引,利用了回表
在这里插入图片描述
针对使用idx_modify_time的理解是,id是聚簇索引,如果遍历ID索引的结果就是,会遍历所有数据,所以使用idx_modify_time索引的覆盖索引机制,而idx_modify_time的顺序和id不一致,所以出现查询到的结果不一

最终,改成如下sql,数据与原数据一致

select w.* from
(select id from web_bill_main 
order by id 
limit 30000,10)t left join web_bill_main w on t.id = w.id

耗时29ms
在这里插入图片描述

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

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

相关文章

python Django的admin后台建设

什么是admin管理后台 1、django提供了完善的后台管理数据库的接口,可供开发过程中调用和测试使用2、django 会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发者使用admin配置步骤1、创建后台管理账号-该账号为管理后台最高权限…

193、【动态规划】AcWing —— 291. 蒙德里安的梦想:状压dp详细解析(C++版本)

题目描述 原题链接:291. 蒙德里安的梦想 解题思路 (1)状态压缩dp先导知识 状态压缩会用二进制位来存储状态信息,在状态计算时,将整数转化为二进制爹形式进行计算。 可表示的状态就是 2n2^n2n 个。 (2&…

python 列表删除多个元素

文章目录一. 删除列表多个元素方法1 使用枚举:2. 使用python中List.pop()方法3. 使用python中List.remove()方法4. 注意二. 使用双指针法删除列表多个元素1. 问题描述:2. 解决方法:3. 代码如下:三. 总结四. 相关链接一. 删除列表多…

扩盘操作LVM扩容操作-Centos7

生产环境要扩容,太久没试过LVM,记录一下走过的坑 [rootarchive ~]# df -h #查看磁盘挂载,对/dev/mapper/vgnfs-lvdata进行扩容 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 909M 0 909M 0…

文件上传漏洞知识总结

直接使用别人的靶场总感觉不太好,那么就干脆自己写一个自己的文件上传靶场吧。正好博客之前也没有单独总结过文件上传的知识点,那么就顺便水一篇文章,岂不是一举两得。当然关于文件上传 upload-labs 总结的比较全面了,非强迫症患者…

HTTP协议详解(上)

目录 前言: 认识URL HTTP协议方法 通过Fiddler抓包 GET和POST之间典型区别 header详解 HTTP响应状态码 常见状态码解释 状态码分类 HTTP协议报文格式 小结: 前言: HTTP协议属于应用层协议,称为超文本传输协议&#xff…

aws dynamodb 基础概念和理论

参考资料 https://amazon-dynamodb-labs.workshop.aws/https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/Introduction.html dynamodb的工作原理 核心概念 table、item和attributes是dynamodb的核心组件,可以分别对应关系型数据库中的表&#x…

JavaScript新手学习手册-基础代码(三)

与上篇博客相接 一:Date对象 var date new Date();console.log(date); //全部时间console.log(date.getFullYear()); //年console.log(date.getMonth()); //月console.log(date.getDay()); //星期几console.log(date.getHours()) //时console.log(d…

java实现Hbase 增删改查

目录 一、新建一个maven工程 二、代码实现 2.1、配置hbase信息,连接hbase数据库 2.2、创建命名空间 2.3、创建表 2.4、删除表,删除之前要设置为禁用状态 2.5、添加数据 2.6、获取命令表空间 / tables列表 2.7、get方法查看表的内容 2.8、scan方法…

腾势D9改装来了,帮大家总结了一些需要改装的项目

最近腾势D9真的太火了,不仅外观霸气,内饰也是非常豪华。 1月份销量在MPV里已经排名第二了,性价比很高。 这边整理了一些改装项目供大家参考,有什么想法可以评论区一起讨论哦1. 电吸门 有车主吐槽车门难关,由于车内空间…

计算机网络:ICMP协议

网际控制报文协议ICMP ICMP协议支持主机或者路由器差错报告和网络探询 类型表明ICMP报文是哪类检验和:检验整个ICMP报文ICMP报文可分为ICMP差错报文和ICMP询问报文。 ICMP差错报告报文 终点不可达:当路由器或者主机不能交付数据报时,向源站…

Spring - Spring框架概述面试题总结

文章目录01. 什么是Spring?02. Spring框架的设计目标,设计理念,和核心是什么?03. Spring的优点是什么?04. Spring框架中都用到了哪些设计模式?05. Spring有哪些应用场景?06. Spring由哪些模块组成&#xf…

基于DDD的微服务落地

DDD四层架构对实时性要求高的强一致性业务场景,可采取分布式事务。分布式事务有性能代价,在设计时需要平衡考虑业务拆分、数据一致性、性能和实现的复杂度,尽量避免分布式事务的产生。领域事件驱动的异步方式是分布式架构常用的设计方式&…

【python】使用python将360个文件夹里的照片,全部复制到指定的文件夹中,并且按照顺序重新命名

最近要做一个图像生成的课题,在网上找了一个混合的数据集。这个数据集中一共有360个文件夹,然后文件夹中有6-9张不等的照片,我的目标就是编写python代码将所有的照片取出来,放到一个指定的文件夹里,并且从1开始按照顺序…

yolov8行人识别教程(2023年毕业设计+源码)

yolov8识别视频直接上YOLOv8的结构图吧,小伙伴们可以直接和YOLOv5进行对比,看看能找到或者猜到有什么不同的地方? Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻…

VMware虚拟机安装Ubuntu 2022最新版详细图文安装教程(VMware虚拟机安装+Ubuntu下载+VMware虚拟机配置运行)

名人说:君子生非异也,善假于物也。——荀子 Code_流苏(CSDN) o(‐^▽^‐)o很高兴你打开了这篇博客,跟着步骤一步步尝试安装吧。✧ 目录 一、简单介绍二、安装虚拟机VMware三、Ubuntu镜像下载四、虚拟机VMware配置及运行★如有疑问,欢迎评论,博主看到即回!当然,期待你的…

【基础算法】双指针---判断子序列

🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…

极速开发,无限可能,2023网易低代码大赛全新赛季启动

去年火爆的低代码大赛还犹在目,近800人用轻舟低代码平台畅享开发乐趣。这不,2023网易低代码大赛即刻启动,3月6日至3月27日限时开放报名,全新角逐,正式展开!1\ 获胜者可得万元大奖、猪厂工作机会 /Low Code …

JavaEE课程实践-Servlet的部署(tomcat服务器)

目录 Servlet简述 tomcat服务器的安装和运行 Servlet的部署 部署具体步骤 一、创建maven工程 二、创建Servlet类 三、导入相应jar包 四、编写Servlet代码 五、运行maven项目,启动tomcat服务器 六、测试访问是否成功。 Servlet简述 Servlet 是 Java EE 技术…

第六章:多线程

第六章:多线程 6.1:程序、进程、线程基本概念 程序 程序program是为了完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程 ​ 进程process是程序的一次执行过程,或是正在运行的一个程序。是一个…