MySQL 原理与优化之Limit 查询优化
作者:51CTO崔皓 发布时间:2024-01-15 04:44:26
标签:MySQL,Limit,查询,优化
假设有表tb_sku,其表结构如下:
表中大约有200w条记录,执行如下的sql 语句大约 4.36s 返回数据
select count(*) from tb_sku;
接着我们使用 对其进行分页查找:
select * from tb_sku limit 0,10;
limit 语句 其中0 代表起始位置,10 为每页返回的数据数量。
如上图所示,很快就返回了查询结果。
接着我们再使用SQL 语句
select * from tb_sku limit 10,10;
语句从记录位置10的位置开始再往下返回10 条记录,也就是第二页的信息。其返回时间也是比较快。
然后,我们加大起始位置 到100w如下:
select * from tb_sku limit 1000000,10;
此时返回时间需要0.74 s,这说明了使用limit 对大数据量的表进行分页,位置越靠后效率越低。拿上面的例子来说,limit 会先对 100w 的数据进行排序,然后再返回10 条数据,而且仅仅返回100w 到 100w 零10条 的记录,其他查询的记录都会丢弃掉,这种做法查询排序的代价非常大。
由此我们需要对大数据量表进行limit 操作进行优化,官方给出的方案是通过覆盖索引和子查询的方式进行优化
根据这个思路首先对id 进行查询:
select id from tb_sku order by id limit 1000000,10;
查询结果就只需要0.34s 比之前的0.74s要快多了。究其原因,因为直接返回id的信息,并没有进行回表操作,所以速度别select * 要快
由于我们需要获得select * 的信息,也就是tb_user 所有字段的信息,因此需要将上面的查询结果和tb_user 进行jion 操作。
select s.* from tb_sku s ,(select id from tb_sku order by id limit 1000000,10 ) t where s.id = t.id;
这里通过查询id 和子查询 的方式将查询结果缩短为 0.38s,比之前直接通过 select * 的方式要缩短一倍的查询时间。
来源:https://blog.51cto.com/u_14279308/5558674
0
投稿
猜你喜欢
- 1、安装mysql5.7CentOS 7之后的版本yum的默认源中使用MariaDB替代原先MySQL,因此安装方式较为以往有一些改变:下载
- 一、前言前两篇博客讲解了爬虫解析网页数据的两种常用方法,re正则表达解析和beautifulsoup标签解析,所以今天的博客将围绕另外一种数
- 本文实例为大家分享了python学生管理系统的具体代码,供大家参考,具体内容如下基于列表存储的学生管理系统,实现如下功能==========
- Line plotsAxes3D.plot(xs, ys, *args, **kwargs)绘制2D或3D数据参数描述xs, ysX轴,Y轴
- 在Python个人博客程序开发实例框架设计中,我们已经完成了 数据库设计、数据准备、模板架构、表单设计、视图函数设计、电子邮件支持 等总体设
- 一、基本概念APScheduler全称Advanced Python Scheduler 作用为在指定的时间规则执行指定的作业。指定时间规则
- 1.集合的定义集合的元素是不可重复的s = {1,2,3,1,2,3,4,5}print(s)print(type(s))s1 = {1}p
- 现在,比较牛的设计师和开发者都认识到了可用性在他们工作中的重要性。可用性好的网站会极大地提高用户体验,并且好的用户体验会让用户更加快乐。用聪
- 一、环境介绍操作系统: win10 64位python版本: 3.8IDE: 采用vscode用到的相关安装包CSDN打包下载地址: htt
- 因为很多时候要涉及到url的编码和解码工作,所以自己制作了一个类,废话不多说 码上见!# coding:utf-8import urllib
- 场景:由于自己的电脑A性能不足,需要转移到一台高性能的主机B上运行python程序,但是该主机不能连接互联网。问题:在个人电脑A上建立了一个
- 问题: 1. 后台管理员只有一个用户: admin, 密码: admin 2. 当管理员登陆成功后, 可以管理前台会员信
- 本文列些处几种去除在Python 列表中(list)可能存在的重复项,这在很多应用程序中都会遇到的需求,作为程序员最好了解其中的
- torch.autograd.backward(variables, grad_variables=None, retain_graph=N
- ChatGPT模型是由OpenAI训练的大型语言模型,能够生成类人文本。通过向它提供提示,它可以生成继续对话或扩展给定提示的响应。在此中,您
- 简单的模型例如线性回归,LR等模型非常易于解释,但在实际应用中的效果却远远低于复杂的梯度提升树模型以及神经网络等模型。现在大部分互联网公司的
- 问题你想将一个多层嵌套的序列展开成一个单层列表解决方案可以写一个包含 yield from 语句的递归生成器来轻松解决这个问题。比如:fro
- 项目:基于Pymysql的专家随机抽取系统引入库函数:>>> import treelib>>> fro
- 前言使用 pymongo 进行 group by 操作有两种基本方式,他们都是 mongodb 的原生命令,于 Collection 对象上
- 导语无论家用电脑还是公司的电脑,定时开关机都是一个非常实用的功能,只是一般都不太受关注。定时关机不仅能延长电脑的使用寿命,还能节约超多的电费