mysql分页与分页性能查询优化
为什么80%的码农都做不了架构师?>>>
mysql分页就直接使用limit进行操作,limit如果我们直接不加任何处理可能数据大了就会很卡的。
一. 最常见MYSQL最基本的分页方式:
select * from content order by id desc limit 0, 10
在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引。随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:
select * from content order by id desc limit 10000, 10
一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。
MYSQL分页性能优化
limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。文中还提到limit n性能是没问题的,因为只扫描n行。
文中提到一种”clue”的做法,给翻页提供一些”线索”,比如还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是9527,最小的是9500,如果我们只提供”上一页”、”下一页”这样的跳转(不提供到第N页的跳转),那么在处理”上一页”的时候SQL语句可以是:
SELECT * FROM message WHERE id > 9527 ORDER BY id ASC LIMIT 20;
不管翻多少页,每次查询只扫描20行。
缺点是只能提供”上一页”、”下一页”的链接形式,但是我们的产品经理非常喜欢”<上一页 1 2 3 4 5 6 7 8 9 下一页>”这样的链接方式,怎么办呢?
如果LIMIT m,n不可避免的话,要优化效率,只有尽可能的让m小一下,我们扩展前面的”clue”做法,还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是9527,最小的是9500,比如要跳到第8页,我看的SQL语句可以这样写:
SELECT * FROM message WHERE id > 9527 ORDER BY id ASC LIMIT 20,20;
跳转到第13页:
SELECT * FROM message WHERE id < 9500 ORDER BY id DESC LIMIT 40,20;
还有网友说可以使用子查询来操作
一,子查询的分页方式来提高分页效率,飘易用的SQL语句如下:
代码如下复制代码SELECT * FROM `content` WHERE id <=
(SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) ORDER BY id desc LIMIT $pagesize
为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。(via)通过explain SQL语句发现:子查询使用了索引!
代码如下复制代码id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY content range PRIMARY PRIMARY 4 NULL 6264 Using where
2 SUBQUERY content index NULL PRIMARY 4 NULL 27085 Using index
经过飘易的实测,使用子查询的分页方式的效率比纯LIMIT提高了14-20倍!
二,JOIN分页方式
代码如下复制代码SELECT * FROM `content` AS t1
JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;
经过我的测试,join分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。explain SQL语句:
代码如下复制代码id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 Using where
2 DERIVED content index NULL PRIMARY 4 NULL 27085 Using index
转载于:https://my.oschina.net/Yonney/blog/404061
mysql分页与分页性能查询优化相关推荐
- mysql分片库分页查询_mysql数据库分页查询优化
当数据很多需要进行分页查询时:需要先查出第一条数据的id然后根据id查询大于id的数据 limt 一页的数据量 1. 直接用limit start, count分页语句, 也是我程序中用的方法: ...
- mysql limit分页知乎_头发一天天的掉,你知道MySQL的Limit有性能问题吗?
你知道MySQL的Limit有性能问题吗? MySQL的分页查询通常通过limit来实现. MySQL的limit基本用法很简单.limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返 ...
- mysql 千万数据分页_MySQL处理千万级数据查询、分页
MySQL数据库优化处理实现千万级快速分页分析,来看下吧. 数据表 collect ( id, title ,info ,vtype) 就这4个字段,其中 title 用定长,info 用text, ...
- mysql临时表如何分页查询慢_面试官扎心一问:数据量很大,分页查询很慢,有什么优化方案?...
准备工作 一般分页查询 使用子查询优化 使用 id 限定优化 使用临时表优化 关于数据表的id说明 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明 ...
- MySQL如何实现分页查询
[转载]MySQL如何实现分页查询 - 知乎 在后端项目中总是避免不了admin管理,当后台管理需要展示数据时就会需要用到分页,接下来在文中中将为大家分享的时MySQL如何实现分页查询,具有一定的参考 ...
- 深入剖析-关于分页语句的性能优化
分页语句是数据库开发和应用场景比较常见的需求,即按照特定的where条件进行过滤,然后在按照一个或者多个条件进行排序(如果不进行排序无法确执行时候无法返回相同的结果),最后取其中的前十行或者几十行. ...
- [数据库]Oracle和mysql中的分页总结
Mysql中的分页 物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 selec ...
- MySQL中的分页查询
MySQL中的分页查询 一.MySQL分页查询原则 在MySQL数据库中使用limit子句进行分页查询: MySQL分页中开始位置为0: 分页子句在查询语句的最后侧: 二.Limit子句(较为常 ...
- php mysql ajax 分页_ajax+php+mysql无刷新分页代码(1/2)_PHP教程
ajax+php+mysql无刷新分页代码 ajax+php教程+mysql教程无刷新分页代码 2 3 4投票结果 5 6 7 8 9 function getxmlhttpobject() 10 { ...
- jsp import mysql con_jsp的分页查询的代码(mysql数据库)
[原来没有写过,听朋友说,比较难,就试一下,还是挺简单的,只不过,具体实用方面还得自己写,没有什么难的,自己看看就懂了.bean文件:package bean;/** * jsp+java bea 这 ...
最新文章
- mysql (双主,互主)
- 微服务:Java EE的拯救者还是掘墓人?
- 梁佳玉 - 昨天的爱
- 弧形背景html,JS实现带圆弧背景渐变效果的导航菜单代码
- openstack运维实战系列(十七)之glance与ceph结合
- 成吉思汗:“世界之鞭”还是“人类之王”?
- PHY以太网自动协商原理
- Skype For Business 2015实战系列14:创建Office Web App服务器场
- C++超详细STL常用算法总结
- VK Cup 2018 Round 1: A. Primal Sport
- java视图扩展_java – 可扩展列表视图 – 子项,不同的布局
- C# DateTime的ToString()方法的使用
- 用户体验测试一样很重要
- Android studio 之 Menu(菜单)
- 一个大学生屌丝心中的seo梦
- golang学习笔记(进阶篇)
- Windows10蓝屏触发及分析
- Linux系统中CPU占用率过高问题原因分析
- 如何通俗理解信创国产化是什么意思?有哪些系统?有什么意义?
- 伪科学、骗科学、错误科学