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

MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题

1. limit 100000,10 和 limit 10区别

  1. LIMIT 100000, 10

    • 这个语句的意思是,从查询结果中跳过前100000条记录,然后返回接下来的10条记录。
    • 这通常用于分页查询中,当你需要跳过大量的记录以获取后续的记录时。例如,如果你有一个包含大量数据的查询结果,你可能想要查看第100001页的数据,每页显示10条记录,这时就会使用这种形式的LIMIT子句。
  2. LIMIT 10

    • 这个语句的意思是,返回查询结果的前10条记录。
    • 这是一个非常常见的用法,用于限制查询结果的数量,特别是在你只需要一小部分数据时。例如,你可能只想查看表中的前10条记录,或者在进行测试时限制返回的数据量。

2. 超大分页优化思路

覆盖索引加子查询

优化思路:分页查询时通过创建覆盖索引提高性能,再通过覆盖索引加子查询的形式进行优化

举例:

假设有一个 users 表,结构如下:

CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(100),email VARCHAR(100),created_at TIMESTAMP
);

我们想要获取从第 1000001 条到第 1000010 条记录的用户名字(即分页)

优化前的 SQL 查询

SELECT name FROM users
ORDER BY id
LIMIT 1000000, 10;

全表扫描:这个查询没有使用子查询,因此 MySQL 必须从第一条记录开始,扫描直到跳过前 1000000 条记录,然后返回接下来的 10 条记录。

性能问题:当表中的记录数非常大时,这种方式会导致显著的性能下降,因为数据库需要遍历大量的记录,导致高的 IO 开销。

优化后的 SQL 查询

-- 创建覆盖索引,包含需要查询的字段(id和name)

CREATE INDEX idx_id_name ON users(id, name);

然后使用子查询优化

SELECT name FROM users
WHERE id IN (SELECT id FROM (SELECT id FROM users ORDER BY id LIMIT 1000000, 10) AS temp
);

内部子查询SELECT id FROM users ORDER BY id LIMIT 1000000, 10

  • 这个子查询的作用是从 users 表中获取 id10000011000010 的记录。
  • 这里会使用id索引快速定位到对应的位置及1000001,而不会从头开始遍历所有记录

外部查询SELECT name FROM users WHERE id IN (...)

  • 外部查询使用内层子查询的结果,获取这些 id 对应的用户 name

覆盖索引的使用

  • 覆盖索引:在 CREATE INDEX idx_id_name ON users(id, name); 中创建的索引包含了查询需要的所有列 idname
  • 由于外部查询只选择了 name 列,且查询条件中使用了 idMySQL 可以直接从索引中获取 idname,避免了对 users 表的回表操作。

3.面试题

3.1 什么是覆盖索引?

3.2 MySQL超大分页怎么处理?

相关文章:

MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题

1. limit 100000,10 和 limit 10区别 LIMIT 100000, 10: 这个语句的意思是,从查询结果中跳过前100000条记录,然后返回接下来的10条记录。这通常用于分页查询中,当你需要跳过大量的记录以获取后续的记录时。例如,如果你…...

RabbitMQ 实现消息队列负载均衡

在现代应用程序中,消息队列是一种重要的架构模式,用于解耦服务、处理异步任务和实现负载均衡。其中,RabbitMQ是一个广泛使用的开源消息代理,提供了高可用性、可靠性和灵活性。本文将展示如何使用Python及其pika库来实现RabbitMQ&a…...

嵌入式linux中HTTP协议原理基本分析

第一:HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维…...

thinkphp和vue基于Workerman搭建Websocket服务实现用户实时聊天,完整前后端源码demo及数据表sql

最近接了一个陪玩小程序,其中有一个实时聊天的项目,需要搭建Websocke服务,通过多方考虑选择了通过GatewayWorker框架(基于Workerman),将代码提取了出来,用到的框架封装到了vendor目录下,完整前后…...

浅谈射频应用

射频(Radio Frequency,缩写为RF)是一种高频交流变化电磁波的简称,其频率范围广泛,从几十千赫兹跨越至几百吉赫兹。射频技术在多个领域有着广泛的应用: 1、通信领域:射频技术是现代通信领域的重要…...

SAP(PP生产制造)拆解工单业务处理

1、BOM维护 要拆解的成品或半成品要和原成品、半成品BOM一致 2、创建拆解工单 CO01选择拆解工单的类型,以及填写拆解的物料和拆解工厂 维护工单组件 注意: 1、拆解入库组件的数量需要维护为负数 2、拆解工单投料组件数量维护为正数 3、拆解工单收发…...

《Python游戏编程入门》注-第4章2

《Python游戏编程入门》的“4.2.2 键盘事件”中介绍了通过键盘事件来监听键盘按键的方法。 1 键盘事件 玩家点击键盘中某个按键实际上包含了两个动作:点击按键和释放按键,也就是按键按下和松开。按键按下的对应的事件是KEYDOWN,按键松开对应…...

deque

deque 底层数据结构 动态开辟的二维数组第一维数组中存放的是第二维数组的指针每个第二维数组大小为512字节。假如存放的是**_Tp类型,每个第二维数组存放512/(sizeof(_Tp**))个元素按照第一维数组大小二倍进行扩容 举例 当deque进行push_back,将下半部分空间元素…...

YOLOv11改进策略【卷积层】| CVPR-2020 Strip Pooling 空间池化模块 处理不规则形状的对象 含二次创新

一、本文介绍 本文记录的是利用Strip Pooling模块优化YOLOv11的目标检测网络模型。Strip Pooling结合了长而窄的卷积核形状在一个空间维度上的长程关系捕捉能力和在另一个空间维度上的局部细节捕捉能力,有效地处理复杂的场景信息。这一机制通过采用 1 N 1N 1N或 N 1 N1 N1的…...

yt-dlp下载视频

插件官方下载地址 通过以下命令行使用 yt-dlp下载 (base) D:\tool\video>cd D:\tool\video (base) PS D:\tool\video> .\vdownlod.bat 此处输入链接或者(base) D:\tool\video>yt-dlp -f bv[extmp4]ba[extm4a] --cookies d:\Downloads\www.youtube.com_cookies.txt -…...

oracle insert忽略主键冲突,忽略重复记录

在INSERT语句中使用IGNORE_ROW_ON_DUPKEY_INDEX提示: INSERT /* IGNORE_ROW_ON_DUPKEY_INDEX(table_name, index_name) */ INTO table_name(column1, column2) VALUES(value1, value2); 或 INSERT /* IGNORE_ROW_ON_DUPKEY_INDEX(table_name(column_name)) */ …...

小新学习k8s第四天之发布管理

一、金丝雀发布(灰度发布) Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。 ①比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的…...

01_IAR新建CC2530工程

IAR建立CC2530工程 前言 ​ 由于很多Zigbee商家提供的教程未有从零建立CC2530工程的讲解,可能会导致后面的开发中出现一些琐碎的问题。本文将以LED流水灯为例,从0到1用IAR建立CC2530工程。 IAR介绍 ​ IAR Embedded Workbench被广泛应用于消费电子、…...

原生鸿蒙的竞争力到底如何?

目录 1. 崛起与挑战2. 安全机制3. 自动化检测前移4. 深入探讨开发者服务优势 1. 崛起与挑战 长期以来,移动操作系统市场被IOS和安卓所垄断,一直都难以推出完整的自主系统,面临诸多挑战,如推广困难、应用适配难度大,以及…...

数字化生态平台:关键功能全解析

​在当今数字化浪潮中,数字化生态平台正发挥着举足轻重的作用。那么,它的关键功能究竟有哪些呢?让我们一探究竟。 首先,数据集成与管理是数字化生态平台的重要功能之一。它能够从多个来源收集数据,包括企业内部系统、外…...

c 到 c++ 过渡

c基础入门 #include <iostream> #include <cmath> #include <unistd.h> // 总结&#xff1a;按照书写依次往下&#xff0c;先看 iostream 再看 cxxx 最后 xxx.husing namespace std; // 本质&#xff1a;自定义作用域&#xff0c;作用域就在该命名空间内部。…...

[linux驱动开发--环境搭建] qemu-9.1+linux-kernel-6.11

本文档模拟vexpress-a9开发板&#xff0c;作为铁头娃&#xff0c;要学就学最新的包 已经上传到github仓库 目录 编译qemu-9.1编译linux-kernel-6.11编译busybox-1.36.1NFS挂载 1. qemu-stable-9.1源码编译安装 1.1. 下载qemu源码的stable-9.1分支 仓库地址 mkdir qemu_9.…...

019集——获取CAD图中多个实体的包围盒(CAD—C#二次开发入门)

如下图所示&#xff0c;获取多个实体的最大包围盒&#xff0c;用红色线表示&#xff1a; 也可单独选圆的包围盒 部分代码如下&#xff1a; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using A…...

【Clickhouse 探秘】Clikchouse 有哪些表引擎?你都知道哪些?

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…...

你好,C++并发世界

C并发编程的主要目的是任务隔离和提高性能 是的&#xff0c;C并发编程的主要目的是任务隔离和提高性能。具体来说&#xff0c;可以总结为以下几点&#xff1a; 任务隔离&#xff1a;通过并发编程&#xff0c;程序可以将不同的任务或计算分隔开&#xff0c;这样可以防止它们之间…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...