MySQL实践——分页查询优化

问题现象

一个客户业务系统带有分页查询功能,但是随着查询页数的增加,越往后查询性能越差,有时一个查询可能需要1分钟左右的时间。分页查询的写法类似于:

select * from employees limit 250000,5000;

这是最传统的一种分页查询写法,但问题也是最多的。随着limit M,N值的增大,往往在越往后翻页的过程中速度越慢,原因是MySQL会读取表中的前M+N条数据,M越大,性能就越差。

这里多说几句,在服务的很多客户中,还是有很多客户使用这种传统的分页查询写法的,主要有两点原因:
①系统早期建设时数据量不大,性能问题没有暴露出来;
②很多开发商把这种写法固化到了产品框架中,导致后期开发人员根本不关心这类问题。

优化方案

1.普通优化写法

针对分页查询,我们可以使用最简单的一种优化写法:

select * from(select emp_no from employees limit 250000,5000) b, employees a where a.emp_no=b.emp_no;

优化后的分页查询写法,会先查询翻页中需要的N条数据的主键值(emp_no),然后根据主键值回表查询所需要的N条数据,在此过程中查询N条数据的主键id在索引中完成,所以效率会高一些。

2.业务优化写法

上面的写法虽然可以达到一定程度的优化,但还是存在性能问题。最佳的方式是在业务上进行配合修改为以下语句:

select * from employees where emp_no > #last_emp_no# order by emp_no limit 20;

采用这种写法,在页面上只能通过点击More来获得更多数据,而不是纯粹的翻页。因此,每次查询只需要使用上次查询出的数据中的id来获取接下来的数据即可,但这种写法需要业务配合。

3.性能对比

传统的分页查询写法:

mysql>select *from employees limit 250000,5000;
5000 rows in set(1.31 sec)

在这里插入图片描述
优化写法:

mysql>select * from(select emp_no from employees limit 250000,5000)b,employees awhere a.emp_no =b.emp_no;
5000 rows in set(0.94 sec)

在这里插入图片描述
从执行计划中可以看出,首先执行子查询中的employees表,根据主键做索引全表扫描,然后与a表通过emp_no做主键关联查询,相比传统写法中的全表扫描效率会高一些。从两种写法上能看出性能有一定的差距,虽然并不明显,但是随着数据量的增大,两者执行的效率便会体现出来。

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

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

相关文章

Amazon图片下载器:利用Scrapy库完成图像下载任务

概述 本文介绍了如何使用Python的Scrapy库编写一个简单的爬虫程序,实现从Amazon网站下载商品图片的功能。Scrapy是一个强大的爬虫框架,提供了许多方便的特性,如选择器、管道、中间件、代理等。本文将重点介绍如何使用Scrapy的图片管道和代理…

Python爬虫:ad广告引擎的模拟登录

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

神器抓包工具 HTTP Analyzer v7.5 的下载,安装,使用,破解说明以及可能遇到的问题

文章目录 1、HTTP Analyzer 工具能干什么?2、HTTP Analyzer 如何下载?3、如何安装?4、如何使用?5、如何破解?6、Http AnalyzerStd V7可能遇到的问题 1、HTTP Analyzer 工具能干什么? A1:HTTP A…

Linux:命令行参数和环境变量

文章目录 命令行参数环境变量环境变量的概念常见的环境变量PATH 环境变量表本地变量和环境变量命令分类 本篇主要解决以下问题: 什么是命令行参数命令行参数有什么用环境变量是什么环境变量存在的意义 命令行参数 在学习C语言中,对于main函数当初的写…

(二)docker:建立oracle数据库mount startup

这章其实我想试一下startup部分做mount,因为前一章在建完数据库容器后,需要手动创建用户,授权,建表等,好像正好这部分可以放到startup里,在创建容器时直接做好;因为setup部分我实在没想出来能做…

订水商城H5实战教程-02系统登录

目录 1 创建数据源2 创建自定义应用3 创建全局变量4 实现登录功能5 控制弹窗是否显示6 最终的效果 上一篇我们分析了订水商城的功能,功能分析好了之后,就需要开发功能。用户登录商城的第一步就是进行登录,登录的时候需要同意用户协议&#xf…

SpringBoot AOP + Redis 延时双删功能实战

一、业务场景 在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。 请求一:A修改数据库数据 B修改Redis数据 请求二&#xff…

修炼k8s+flink+hdfs+dlink(六:学习k8s-pod)

一:增(创建)。 直接进行创建。 kubectl run nginx --imagenginx使用yaml清单方式进行创建。 直接创建方式,并建立pod。 kubectl create deployment my-nginx-deployment --imagenginx:latest 先创建employment,不…

CSS页面基本布局

前提回顾 1. 超文本标记语言(HTML)是一种标记语言,用来结构化我们的网页内容并赋予内容含义; (超文本标记语言(英语:HyperText Markup Language /ˈhaɪpətekst ˈmɑːkʌp ˈlŋɡwɪdʒ /…

由浅到深 : Self-Attention (自注意力机制)

Self-Attention 看到下面的第一个saw是动词,第二个saw是名词。 因为第一个saw和第二个saw在形式上没有任何差别。如果任务是进行词性的判断,把上面的词直接输入给神经网络,那么它肯定不能够正确分析。 想要正确分析词性,那么该…

CRM自动化意味着什么?企业如何从中受益?

客户关系管理(CRM)软件不再仅仅适用于大公司或销售周期长的行业,它越来越成为各种规模企业的重要工具。 在日常工作中,当你陷入流程的所有细节时,可能会产生不必要的工作。因此,如果你想要CRM提供的组织和…

Redis的持久化策略:RDB与AOF(面试题详解)

文章来源:Redis持久化的两种方式:RDB与AOF(详解),订正了一些错误 一、概述: RDB和AOF持久化的由来? 因为Redis中的数据是基于内存的,所以如果出现服务器断电或者服务器宕机&#xf…

数据结构堆详解

[TOC]堆详解 一,堆 1.1堆的概念 堆的性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 1.2堆的存储模式 我们前面的文章提到过,二叉树的两种存储模式,一个是顺序存储,一…

【Java集合类面试八】、 介绍一下HashMap底层的实现原理

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官: 介绍一下HashMap底层的…

华为OD技术面试-最短距离矩阵(动态规划、广度优先)

背景 记录2023-10-21 晚华为OD三面的手撕代码题,当时没做出来,给面试官说了我的想法,评价:解法复杂了,只是简单的动态规范 或 广度优先算法,事后找资料记录实现方式。 题目 腐烂的橘子 问题描述&#xff…

怎样找外企/远程的工作

“如果你既不想卷,又不想参与职场的勾心斗角,也不算行业大牛,还不愿意冒太高风险,那还有一种渠道,就是找海外公司的远程工作,比如我有几个程序员朋友,都是拿着硅谷动辄 20w 刀的薪水&#xff0c…

头脑风暴之约瑟夫环问题

一 问题的引入 约瑟夫问题的源头完全可以命名为“自杀游戏”。本着和谐友爱和追求本质的目的,可以把问题描述如下: 现有n个人围成一桌坐下,编号从1到n,从编号为1的人开始报数。报数也从1开始,报到m人离席&#xff0c…

重生奇迹mu宠物带来不一样的体验

重生奇迹mu宠物有什么作用? 全新版本中更是推出了各种宠物,在玩游戏时还可以带着宠物,一起疯狂的刷怪等等,可以为玩家带来非常不错的游戏体验,那么下面就来给大家说说各种宠物适合做什么事情。 1、强化恶魔适合刷怪 …

爱创科技携手洽洽食品,探索渠道数字化最优解!

坚果的下半场,是从吃到喝。 消费升级大潮下,健康养生理念逐渐深入人心。以“天然健康”为核心的食品新消费潮流正加速形成,一个个打着“美味与营养”黄金设定的品类风口正被不断创建,其中人气有增无减的当属植物基饮品。据相关报告…