Mysql大数据量分页优化
假设有一个千万量级的表,取1到10条数据;
select * from table limit 0,10; select * from table limit 1000,10;
这两条语句查询时间应该在毫秒级完成;
select * from table limit 3000000,10;
你可能没想到,这条语句执行之间在5s左右;
为什么相差这么大?
可能mysql并没有你想的那么智能,比如你要查询 300w开始后面10条数据;mysql会读取300w加10条这么多的数据,只不过 过滤后返回最后10条而已!!!
那么如果解决这个问题呢;这里总结三种常用方法;
第一种简单粗暴,就是不允许查看这么靠后的数据,比如百度就是这样的

最多翻到76页就不让你翻了,这种方式就是从业务上解决;
第二种方法,在查询下一页时把上一页的行id作为参数传递给客户端程序,然后sql就改成了
select * from table where id>3000000 limit 10;
这条语句执行也是在毫秒级完成的,id>300w其实就是让mysql直接跳到这里了,不用依次在扫描全面所有的行
如果你的table的主键id是自增的,并且中间没有删除和断点,那么还有一种方式,比如100页的10条数据
select * from table where id>100*10 limit 10;
最后第三种方法:延迟关联
我们在来分析一下这条语句为什么慢,慢在哪里。
select * from table limit 3000000,10;
玄机就处在这个 * 里面,这个表除了id主键肯定还有其他字段 比如 name age 之类的,因为select * 所以mysql在沿着id主键走的时候要回行拿数据,走一下拿一下数据;
如果把语句改成
select id from table limit 3000000,10;
你会发现时间缩短了一半;然后我们在拿id分别去取10条数据就行了;
语句就改成这样了:
select table.* from table inner join ( select id from table limit 3000000,10 ) as tmp on tmp.id=table.id;
这三种方法最先考虑第一种 其次第二种,第三种是别无选择
Mysql大数据量分页优化的更多相关文章
- MySQL 大数据量分页优化
		假设有一个千万量级的表,取1到10条数据: ,; ,; 这两条语句查询时间应该在毫秒级完成: ,; 你可能没想到,这条语句执行之间在5s左右: 为什么相差这么大? 可能mysql并没有你想的那么智能, ... 
- MySQL大数据量分页查询方法及其优化
		MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ... 
- 【1】MySQL大数据量分页查询方法及其优化
		---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千 ... 
- MySQL大数据量分页性能优化
		mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ... 
- MySQL大数据量分页查询
		mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ... 
- SQL优化-大数据量分页优化
		百万数据量SQL,在进行分页查询时会出现性能问题,例如我们使用PageHelper时,由于分页查询时,PageHelper会拦截查询的语句会进行两个步骤 1.添加 select count(*)fro ... 
- 【mysql优化】大数据量分页优化
		limit 翻页原理 limit offset,N, 当offset非常大时, 效率极低, 原因是mysql并不是跳过offset行,然后单取N行, 而是取offset+N行,返回放弃前offset行 ... 
- 【MYSQL】mysql大数据量分页性能优化
		转载地址: http://www.cnblogs.com/lpfuture/p/5772055.html https://www.cnblogs.com/shiwenhu/p/5757250.html ... 
- mysql大数据量分页查询优化
		参考文章:https://www.dexcoder.com/selfly/article/293 Mysql的分页查询十分简单,但是当数据量大的时候一般的分页就吃不消了. 传统分页查询:SELECT ... 
随机推荐
- Android开发之Fragment传递參数的几种方法
			Fragment在Android3.0開始提供,而且在兼容包中也提供了Fragment特性的支持. Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自己定义Fragmen ... 
- Spark的操作列表
			Action 操作1. collect() ,返回值是一个数组,返回dataframe集合所有的行2. collectAsList() 返回值是一个java类型的数组,返回dataframe集合所有的 ... 
- ThinkPHP  的URL重写时遇到No input file specified的解决方法
			因为在Fastcgi模式下,php不支持rewrite的目标网址的PATH_INFO的解析 ThinkPHP运行在URL_MODEL=2时,会出现 No input file specified.的情 ... 
- SSIS 自测题-文件操作类
			说明:以下是自己的理解答案,不是标准的答案,如有不妥烦请指出. 有些题目暂时没有答案,有知道的请留言,互相学习,一起进步. 1.什么是控制流,什么是数据流,控制流和数据流之间的关系是什 ... 
- 在Javascript弹出窗口中输入换行符
			private void showMessage(string strMsg) { Page.RegisterStartupScript("scriptStr", "&l ... 
- 梯度下降算法到logistic回归
			http://sbp810050504.blog.51cto.com/2799422/1608064/ http://blog.csdn.net/dongtingzhizi/article/detai ... 
- MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架
			MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ... 
- noip2014滚粗记
			滚粗了..伤心. day0:和baba一起去,但是整天都是下雨啊好不爽,鞋子都湿了啊好不爽,注定是要滚粗?在火车站等了1h后上动车走人...在此期间我还天真的认为火车站的wifi可以被我给破解然后上网 ... 
- 【UVa】And Then There Was One(dp)
			http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ... 
- 关于Java中的HashMap的深浅拷贝的测试与几点思考
			0.前言 工作忙起来后,许久不看算法,竟然DFA敏感词算法都要看好一阵才能理解...真是和三阶魔方还原手法一样,田园将芜,非常可惜啊. 在DFA算法中,第一步是需要理解它的数据结构,在此基础上,涉及到 ... 
