分页查询的SQL优化
分页查询SQL优化
- 一、问题背景
- 二、优化思路
- 三、进一步
- 四、总结
一、问题背景
在数据库中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器哦。
当一个表数据有几百万的数据的时候成了问题!
如 * from table limit 0,10 这个没有问题
当 limit 200000,10 的时候数据读取就很慢
limit10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,而性能的问题就在这里。
二、优化思路
上面分页语句 limit10000,20,前面扫描出的10000都是浪费的,有没有办法避免这种浪费
参考如下SQL语句(PG数据库)
--查询10条记录,即500-510,由于排序了,最后一条ltp_id为6de468ef-d781-431b-ae4e-0edb96fb371d/odu/ochttp_bi-1/11/0/10
select * from ltp_basic_info order by ltp_id limit 10 offset 500;--再查询10条记录,即510-520
select * from ltp_basic_info order by ltp_id limit 10 offset 510;--再查询10条记录,即510-520,优化后的语句
select * from ltp_basic_info where ltp_id>'6de468ef-d781-431b-ae4e-0edb96fb371d/odu/ochttp_bi-1/11/0/10' order by ltp_id limit 10;
基本思路 是借助了排序和比较,一次性过滤到不需要的数据
三、进一步
当分页查询里,增加了过滤条件时,则上面的优化则会失效,数据不连续。
select * from ltp_basic_info where ltp_id like '6%' order by ltp_id limit 10 offset 20;
这个同样会扫瞄之前多余的10条全量数据,一个优化手段如下,先只查询ltp_id
select * from (select ltp_id from ltp_basic_info where ltp_id like '6%' order by ltp_id limit 10 offset 20) tempId left join ltp_basic_info b on tempId.ltp_id=b.ltp_id;
四、总结
- 当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢,你需增加order by,并且order by字段需要建立索引。
- 如果使用子查询去优化LIMIT的话,则子查询必须是连续的,某种意义来讲,子查询不应该有where条件,where会过滤数据,使数据失去连续性。
参考:https://www.cnblogs.com/azhaozhao/articles/15080807.html
分页查询的SQL优化相关推荐
- 千万级别数据查询优化_MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...
- mysql一样的查询在我本地很快但是线上很慢_MySQL大数据量分页查询方法及其优化...
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...
- MySQL 和 Oracle 大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...
- oracle 亿级数据分页,oracle分页查询千万级优化-Oracle
oracle分页查询千万级优化,在做比对项目时,有表是3千万多的数据,在页面做分页查询时很卡40s,反正差不多一分钟的时间,后来更了sql,优化了代码就好了很多,4s就可以了. 代码里优化是把总条数存 ...
- MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)
摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了 ...
- MySQL分页查询方法及优化
MySQL分页查询方法及优化 http://uusama.com/458.html
- mybatis mysql 分页sql语句_MySql实现分页查询的SQL,mysql实现分页查询的sql语句(转)...
http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...
- java mysql 分页查询_MySQL分页查询方法及优化
当数据库的数据量很大时,一次性查询结果就会变得很慢,为了提高查询效率,我们可以使用MySQL的分页查询功能.本文就为大家带来MySQL分页查询方法及优化. 推荐阅读: 分页查询方法: 在MySQL中, ...
- oracle查询实现分页,Oracle实现分页查询的SQL语法汇总
本文实例汇总了Oracle实现分页查询的sql语法,整理给大家供大家参考之用,详情如下: 1.无ORDER BY排序的写法.(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据 ...
最新文章
- (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT
- Yii AR Model 查询
- python给生活带来哪些改变_你们觉得python简单么?真的能给生活带来更多机遇么?或者说某些改变?...
- opencv机器学习线性回归_Python机器学习之?线性回归入门(二)
- saltstack之keepalived的安装配置
- 1701. Ostap and Partners(并查集-关系)
- CentOS7设置中文字符集
- 通过asp.net 短信猫发短信
- PhpStorm下Laravel代码智能提示
- 5.6 Transformer-XL讲解 意境级
- Mosets Tree开发笔记
- log nginx 显示时间_【日常小知识系列01】Nginx日志简述
- 创建可维护的自动化验收测试
- vs2008 sp1补丁安装到最后一点点的时候,就无法安装下去了 解决方法[转]
- 如何自己编写一个交通仿真软件(一)火种
- html5版堆糖,堆糖(Duitang)
- 全文 40000 字,最强(全) Matplotlib 实操指南
- 一篇文章搞懂php文件系统基本操作
- 浅析嵌入式系统的发展趋势
- 古诺的寡头模型—寡占的斯塔克伯格模型
热门文章
- Docker 核心技术与实现原理,这篇写得比较清楚
- 关闭office Skype for business 自启动 ---> win7【亲测可用,可供参考】
- python清除所有变量_python清除变量
- mycat mysql 性能测试_mycat读写分离性能测试
- 《当代教育科学(原:山东教育科研)》投稿经验分享
- /etc/inittab,/etc/init.d/rcS和/etc/profile分析
- 对于技术术语专业化的思考
- 思科三层交换机配置SVI 实现VLAN 间路由
- 经典非对称加密算法:RSA算法原理、实现详解(C++、Java)
- 怎么更改锁定计算机背景图片,Win7系统怎么更改锁屏壁纸?注册表如何修改锁屏壁纸?...