mysql大量数据分页查询优化-延迟关联
所有的php初学者都应该知道,mysql的分页语句写法如下:
1
|
select * from a limit (page-1)*page_size,page_size |
而当这语句分页到一定程度时,例如1000页,每页20条
1
|
select * from a limit 19980,20 |
会发现分页之后查询的会越来越慢
原因是因为limit a,b 的取数据方式是,先取出a+b条数据,再把a条筛选掉,剩b条,相当于一次性要取a+b条的数据,而a条其实是无用的
解决方案如下
一:php代码解决
例如我们先查询出第一页的数据:
1
|
select * from a limit 20 |
保留最后一个的id,当需要取第2页数据时,则
1
|
select * from a where id>最后一个的id limit 20 |
这样数据库就会每次都能走索引,然后只查出20条
缺点:不能从第一页跳转到第n页
缺点解决方案:前100页,不做优化,当到101页时采用该优化方案,并且不让用户从101页进行页面跳转到1xx页
二:mysql解决
1
2
3
4
5
6
7
|
SELECT * FROM a inner join ( select id from a LIMIT 19980, 20 ) as lim using(id); |
使用该方法,会先从索引表取出索引id,然后进行using索引覆盖方法,因为先查询的是索引,然后才从索引里关联取出20条记录,大大的提升了查询速度
实例图:
普通方法查询,0.123秒
上一页最后一个的id为20000,则
php方法查询,0.070秒
mysql索引覆盖查询,0.089秒
本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn
mysql大量数据分页查询优化-延迟关联的更多相关文章
- MySQL 分页查询优化——延迟关联优化
目录 1. InnoDB表的索引的几个概念 2. 覆盖索引和回表 3. 分页查询 4. 延迟关联优化 写在前面 下面的介绍均是在选用MySQL数据库和Innodb引擎的基础开展.我们先 ...
- mysql 大数据分页查询优化
应用场景: 当有一张表的数据非常大,需要使用到分页查询,分页查询在100w条后查询效率非常低: 解决方案: 1.业务层解决:只允许用户翻页一百页以内,十条一页: 2.使用where id > 5 ...
- 关于MySQL大量数据分页查询优化
select * form user id in(select id from user limit 1000000,10);
- mysql优化----大数据下的分页,延迟关联,索引与排序的关系,重复索引与冗余索引,索引碎片与维护
理想的索引,高效的索引建立考虑: :查询频繁度(哪几个字段经常查询就加上索引) :区分度要高 :索引长度要小 : 索引尽量能覆盖常用查询字段(如果把所有的列都加上索引,那么索引就会变得很大) : 索引 ...
- MySQL大数据分页的优化思路和索引延迟关联
之前上次在部门的分享会上,听了关于MySQL大数据的分页,即怎样使用limit offset,N来进行大数据的分页,现在做一个记录: 首先我们知道,limit offset,N的时候,MySQL的查询 ...
- 【MySQL】性能优化 之 延迟关联
[背景] 某业务数据库load 报警异常,cpu usr 达到30-40 ,居高不下.使用工具查看数据库正在执行的sql ,排在前面的大部分是: SELECT id, cu_id, name, in ...
- mysql 大数据分页优化
一.mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from prod ...
- Mysql大数据量查询优化
一般MYSQL最基本的分页方式: select * from content order by id desc limit 0, 10 在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就 ...
- MySql的数据分页的Sql
一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的 ...
随机推荐
- 10.14 ssh:安全地远程登录主机
ssh命令 是openssh套件中的客户端连接工具,可以使用ssh加密协议实现安全的远程登录服务器,实现对服务器的远程管理,Windows中的替代工具为Xshell.putty.SecureCRT等. ...
- rocketmq常见问题及使用 新手篇
一 部署阶段 1.启动命令 nameServer启动:nohup sh bin/mqnamesrv -n ip地址:9876 & broker启动:nohup sh bin/mqbroker ...
- 详述盒子模型(包含padding、border、margin的详细用法和描述)
提起盒子模型,我想无论是对于一个前端资深开发人员还是前端入门开发人员来说都不陌生,这是CSS最基础的知识. 但是惭愧地说,我之前理解的盒子模型,只是文字上的理解.我知道定义一个元素的宽度和高度时,设置 ...
- Docker学习(2) 安装
1 在Ubanru中安装 简单安装: 2 windows安装docker 3 OS X 安装docker
- 整数划分——区间dp(石子合并)
这不是将一个数以一来划分,而是把一个整数以位来划分 题目描述 如何把一个正整数N(N长度<20)划分为M(M>1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式 ...
- EyeQ进展The Evolution of EyeQ
EyeQ进展The Evolution of EyeQ Mobileye's proven leadership in ADAS technologies is based in our EyeQ f ...
- 深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析
深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析 What Else Can Fool Deep Learning? Addressing Color Constan ...
- 重新整理 .net core 实践篇—————静态中间件[二十一]
前言 简单整理一下静态中间件. 正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录. 这个就比较值得注意的,可能刚开始学 ...
- 06:JS(02)
对象 一切皆对象 数组(类似于python里面的列表) [] var l = [11,22,33,44,55] typeof l "object" var l1 = [11,'sd ...
- SpringBoot 自动配置原理,翻源码看一下
初始化一个Springboot项目,在主启动类会有这么一个注解:@SpringBootApplication,自动装配的秘密全在主启动类这个注解里面了 点进去一层会发现有三个子注解组成,分别是 @ ...