MySQL深分页优化
MySQL中的深分页问题通常是指当我们通过LIMIT语句查询数据,尤其是在翻到较后面的页码时,性能会急剧下降。例如,查询第1000页的数据,每页10条,系统需要跳过前9990条数据,然后才能获取到所需的记录,这在大数据集上非常低效。
传统的深分页实现方法通常是使用OFFSET和LIMIT直接做分页查询:
SELECT * FROM table
ORDER BY some_column
LIMIT 9990, 10;
这会导致数据库扫描大量不需要的行然后抛弃它们,才能获取到真正需要的数据。
延迟关联的工作方式
延迟关联通过两步查询优化性能:
-
快速定位:首先仅在索引上运行快速查询,快速定位到需要的数据的位置。这个步骤不获取所有字段,只获取主键或者是用于排序的列。
-
精确获取:然后根据第一步查询获得的主键(或少数几个列),做第二步的查询以精确获取所有需要的数据字段。
示例:
-- 步骤1: 查询获取需要的主键
SELECT id
FROM table
ORDER BY some_column
LIMIT 9990, 10;-- 步骤2: 根据主键精确获取数据
SELECT *
FROM table
WHERE id IN (/* 步骤1中查询得到的id列表 */);
为什么能提升性能
- 减少数据扫描量:第一步查询只在索引上运行,大大减少了数据的扫描量。因为索引通常比完整的数据行要小很多,而且数据库可以更有效地在索引上进行排序和分页操作。
- 减少IO操作:只有在第二步查询中才会获取完整的数据行,这减少了数据库的IO操作,尤其是当表中包含大量大型字段(如
TEXT,BLOB类型)时。 - 充分利用索引:通常,第一步的查询能够充分利用索引,使查询效率最大化。
最大ID查询法
使用最大ID查询法,我们利用了数据库中的ID通常是自增(或至少是有序的)这一性质。通过记录上一次查询返回的最后一条记录的ID,下一次查询时,我们只需要选择ID大于这个值的记录,这样避免了扫描和跳过前面所有的记录。
优点
- 性能提升:这种方法减少了数据库的负载,尤其是对于大数据集。因为它只查询需要的数据,避免了大量的无用扫描。
- 可扩展性:随着数据量的增加,传统的
OFFSET方法性能降低,而最大ID方法的性能下降不明显,适合大数据量的场景。 - 简单有效:实现简单,但能显著提高分页查询的性能。
缺点
-
依赖有序的ID:这个方法的有效性依赖于有序的ID(比如自增ID)。如果数据库表中没有一个有序的、单调递增的字段,这种方法就不适用。
-
不适合复杂排序需求:当查询需要基于其他字段进行排序时,这种方法可能就不再适用。比如,如果需要基于时间或者其他非递增字段进行分页,最大ID方法就不能直接使用了。
-
数据删除或更新的处理:如果数据表中的记录会被删除,那么这可能会导致某些ID被跳过,从而影响分页的连续性。同样,如果ID是可更新的,那么这种方法也会遇到问题。
-
非等距分页:使用最大ID进行分页时,如果数据表中存在大量的删除操作,导致ID有较大的间隔,可能会出现每页数据量不一致的情况。虽然通常这不是一个大问题,但在某些应用场景中可能会影响用户体验。
-
首页数据动态变化:如果你的应用场景需要频繁展示数据的最新状态,使用最大ID分页法可能会导致最新添加的记录不被即时显示。例如,当用户在浏览第二页时,如果首页有新数据添加,用户回到首页可能看不到这些新数据,因为查询的起始ID已经改变。
-
不适用于随机访问:对于需要直接跳转到指定页面的场景(例如,用户直接跳转到第100页),最大ID方法实现起来比较困难,因为你无法直接知道第100页开始的ID是多少,除非你额外维护一个每页开始ID的映射表。
相关文章:
MySQL深分页优化
MySQL中的深分页问题通常是指当我们通过LIMIT语句查询数据,尤其是在翻到较后面的页码时,性能会急剧下降。例如,查询第1000页的数据,每页10条,系统需要跳过前9990条数据,然后才能获取到所需的记录࿰…...
问题:律师会见委托人的方式包括团体会见和( )。 #职场发展#笔记#学习方法
问题:律师会见委托人的方式包括团体会见和( )。 参考答案如图所示...
Spring Boot中整合Jasypt 使用自定义注解+AOP实现敏感字段的加解密
😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…...
pytorch中的维度变换操作性质大总结:view, reshape, transpose, permute
在深度学习中,张量的维度变换是很重要的操作。在pytorch中,有四个用于维度变换的函数,view, reshape, transpose, permute。其中view, reshape都用于改变张量的形状,transpose, permute都用于重新排列张量的维度,但它们…...
LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划
LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划 文章目录 LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划前言一、题目概述二、解题方法2.1 一维表格的自底向上动态规划2.1.1 思路讲解2.1.2 伪代码 + 逐…...
基于工业互联网打造敏捷供应链的实现方式:创新路径与实践应用
引言 工业互联网和敏捷供应链是当今制造业发展中的两个重要概念。工业互联网以数字化、网络化和智能化为核心,致力于将传统工业生产与互联网技术相融合,从而实现生产过程的高效、智能和灵活。而敏捷供应链则强调快速响应市场需求、灵活调整生产和供应计划…...
碳化硅柱式膜的广泛应用
碳化硅柱式膜是一种高性能的过滤材料,以其独特的性质和广泛的应用领域在现代工业中占据着重要地位。以下是对碳化硅柱式膜的详细介绍: 一、基本概述 碳化硅柱式膜是以碳化硅超滤膜为过滤单元构成的,其过滤精度高达0.1微米。这种膜材料具有耐化…...
【QT】QFont字体设置
设置字体大小 f.setPointSize(12); // 设置字体大小为12点设置字体加粗 f.setBold(true); // 使字体加粗设置字体斜体 f.setItalic(true); // 使字体斜体设置字体下划线 f.setUnderline(true); // 给字体添加下划线设置字体删除线 f.setStrikeOut(true); // 给字体添加删除…...
Vue3+vite部署nginx的二级目录,使用hash模式
修改router访问路径 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory (/mall4pc-bbc/),routes: [XXX,] })配置package.json文件 "build:testTwo": "vite build --mode testing --ba…...
云南区块链商户平台发票助手成品
目录 1 概述2 功能对比3 项目演示图4 核心逻辑4.1智能赋码4.2 解密方法4.3 登录与检测4.4 发票金额大写转换4.5 检查登录是否失效4.6 验证码识别5 演示效果6 项目部署6.1 Web站点部署6.1.1 环境6.1.2 前端6.1.3 后端6.2 Docker部署6.2.1 构建镜像6.2.2 创建容器6.3.3 访问项目域…...
AI图书推荐:检索增强生成RAG赋能大语言模型
本书《检索增强生成RAG赋能大型语言模型》(Retrieval-Augmented Generation - Dr. Ray Islam :Mohammad Rubyet )深入探讨了如何通过结合检索系统与神经语言模型,提升人工智能在自然语言处理领域的能力。 以下是各章节内容的概要&…...
高效学习LabVIEW的方法
学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础,在线资源便于查漏补缺,自学实验强化理解,论坛互动解决疑难,结合实际项目应用提高实践技能。结合项目学习是最高效…...
C语言 | Leetcode C语言题解之第136题只出现一次的数字
题目: 题解: class Solution { public:vector<int> singleNumbers(vector<int>& nums) {int eor 0;for (int num:nums)eor ^ num;int rightOne eor & (~eor 1); // 提取出最右的1int onlyOne 0;for (int cur : nums) {if ((cur…...
如何利用Varjo混合现实技术改变飞机维修训练方式
自2017年以来,总部位于休斯顿的HTX实验室一直在推进混合现实技术,与美国空军密切合作,通过其EMPACT平台提供可扩展的沉浸式飞机维护虚拟现实培训。 虚拟和混合现实对维修训练的好处: l 实践技能:提供一个非常接近真实场…...
C++:按指定字符分割字符串
按指定字符分割字符串 [C]对string按指定分隔符分割(split) #include <iostream> #include <vector> #include <string> #include <sstream> using namespace std; int main() {string origin_str "hello world !"; // 需要进行分割的字符串…...
网络网络层之(6)ICMPv4协议
网络网络层之(6)ICMPv4协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…...
Opengrok代码在线查看平台
OpenGrok 是一个基于 Web 的源代码搜索引擎和交叉引用工具,它可以用来浏览和搜索代码库。虽然 OpenGrok 提供了代码搜索、查看文件和历史等功能,但它本身不是一个完整的在线集成开发环境(IDE)。然而,OpenGrok 可以作为…...
济南适宜地提取
题目: 网上下载中国的DEM、土地利用地图(1980、2000、2015年的)和一张最新济南市行政区划 图(要求:莱芜市并入济南后的区划图); 2.网上下载中国2015年年平均降水空间插值数据;3..网上下载中国2015年年平均气温空间插值数据; (注:以上数据可到资源环境科学与数据中心下载http…...
Windows 安装虚拟机(VMware+Ubuntu18.04)
Windows下虚拟机安装 一、资源下载1.1 VMware安装包下载1.2 Ubuntu镜像下载二、电脑分区三、Vmware安装四、Vmware检查4.1 注册信息查看4.2 检查网络适配器五、Ubuntu安装5.1 创建新的虚拟机5.2 打开虚拟机这是一篇介绍在Windows系统上安装Ubuntu虚拟机的操作教程。 一、资源下…...
图像算法---自动对焦AF
一,CDAF反差对焦原理 CDAF,全称Contrast Detection Auto Focus,即反差式对焦或对比度检测自动对焦,是一种广泛应用于入门级数码相机和相机模块化智能手机上的自动对焦技术。以下是关于CDAF反差对焦的详细介绍: 工作原…...
Pixel Fashion Atelier快速上手:非对称RPG菜单布局与像素按键交互详解
Pixel Fashion Atelier快速上手:非对称RPG菜单布局与像素按键交互详解 1. 项目概览 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站,它彻底改变了传统AI工具的界面设计理念。这款工具将复古日系RPG游戏的"明亮城…...
2026 Global Ion Exchange Resin Systems Market Trends:关税扰动下的工程水处理系统重构与产业链迁移逻辑
观点 离子交换树脂系统的竞争核心,已经不再是“树脂材料”,而是“系统工程能力 供应链组织能力”。 2026年关税变量的加入,本质上正在把这个行业从“化工材料赛道”,推向“工程系统全球制造网络”的复合竞争阶段。一、这不是树脂…...
别再只改默认密码了!Nacos 1.x/2.x 生产环境安全加固保姆级清单(附漏洞自查脚本)
Nacos生产环境安全加固全指南:从基础配置到漏洞防御 在微服务架构盛行的今天,Nacos作为服务发现和配置管理的核心组件,其安全性直接影响整个系统的稳定性。许多团队在部署Nacos时往往只满足于修改默认密码,却忽视了完整的安全防护…...
DASD-4B-Thinking应用场景:科研人员用Chainlit调用长链思维模型写论文推导
DASD-4B-Thinking应用场景:科研人员用Chainlit调用长链思维模型写论文推导 安全声明:本文仅讨论技术实现与应用,所有内容均符合技术交流规范,不涉及任何敏感或违规内容。 1. 科研写作的新助手:当AI遇到学术研究 作为一…...
Rust Web开发:ActixWeb实战指南
1. 为什么选择ActixWeb进行Rust Web开发 我第一次接触ActixWeb是在三年前的一个电商项目里,当时团队需要处理每秒上万次的库存查询请求。测试了多个Rust框架后,ActixWeb凭借其卓越的性能表现脱颖而出——在同等硬件条件下,它的QPS(…...
车载Java OTA升级崩溃率从18.7%降至0.3%:基于Delta Patch + 类隔离热修复的4步标准化流程
第一章:车载Java OTA升级崩溃率从18.7%降至0.3%:基于Delta Patch 类隔离热修复的4步标准化流程在车载嵌入式Java环境(JVM 11,ART兼容层)中,OTA升级引发的ClassCastException与NoClassDefFoundError曾导致高…...
边缘智能部署:AI模型在边缘节点的轻量化改造
边缘智能部署:AI模型在边缘节点的轻量化改造📚 本章学习目标:深入理解AI模型在边缘节点的轻量化改造的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《云原生、云边端一体化与算力基建&a…...
新手最值得入的一款ai音乐工具
2026年,ai音乐爆发的一年。国内国外各种AI音乐工具层出不穷。想要尝试AI音乐的新手宝宝该怎么去选择呢?市面上大大小小的ai音乐创作软件我基本都尝试过。我觉得只有一款工具是最值得推荐的,也是我使用的最多的。那就是蘑兔AI,你们…...
本地Cookie管理工具:安全导出与高效应用指南
本地Cookie管理工具:安全导出与高效应用指南 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在当今数字化环境中,Cookie作为…...
STM32与NB-IoT温室水培系统设计与实现
1. 项目概述与背景这个温室水培系统项目是我去年为一个农业科技园区设计的实际案例,当时客户需要一套能够实现远程监控的智能种植解决方案。经过三个月的开发和调试,最终形成了这套基于STM32和NB-IoT的完整系统。现代温室种植面临几个核心痛点࿱…...
