mysql分片库分页查询_mysql数据库分页查询优化
当数据很多需要进行分页查询时:需要先查出第一条数据的id然后根据id查询大于id的数据 limt 一页的数据量
1. 直接用limit start, count分页语句, 也是我程序中用的方法:
select * from product limit start, count
当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下:
select * from product limit 10, 20 0.016秒
select * from product limit 100, 20 0.016秒
select * from product limit 1000, 20 0.047秒
select * from product limit 10000, 20 0.094秒
我们已经看出随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的,那么我们把起始记录改为40w看下(也就是记录的一般左右) select * from product limit 400000, 20 3.229秒
再看我们取最后一页记录的时间
select * from product limit 866613, 20 37.44秒
难怪搜索引擎抓取我们页面的时候经常会报超时,像这种分页最大的页码页显然这种时
间是无法忍受的。
从中我们也能总结出两件事情:
1)limit语句的查询时间与起始记录的位置成正比
2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。
2. 对limit分页问题的性能优化方法
利用表的覆盖索引来加速分页查询
我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。
因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。
在我们的例子中,我们知道id字段是主键,自然就包含了默认的主键索引。现在让我们看看利用覆盖索引的查询效果如何:
这次我们之间查询最后一页的数据(利用覆盖索引,只包含id列),如下:
select id from product limit 866613, 20 0.2秒
相对于查询了所有列的37.44秒,提升了大概100多倍的速度
那么如果我们也要查询所有列,有两种方法,一种是id>=的形式,另一种就是利用join,看下实际情况:
SELECT * FROM product WHERE ID > =(select id from product limit 866613, 1) limit 20
查询时间为0.2秒,简直是一个质的飞跃啊,哈哈
另一种写法
SELECT * FROM product a JOIN (select id from product limit 866613, 20) b ON a.ID = b.id
查询时间也很短,赞!
其实两者用的都是一个原理嘛,所以效果也差不多
mysql分片库分页查询_mysql数据库分页查询优化相关推荐
- mysql 分表 条件查询_mysql分表+查询
最近面试,问到关与mysql数据库的分表一些问题,如设计一个千万级别的会员数据库,当时想到了分表,但是当问到如何跟据username查询到用户的信息时,这时,有点卡住了,所以为了让自已重新认识分表,而 ...
- mysql 分表后查询_Mysql分表后怎么查询效率高?
胸弟,mysql分表要慎之又慎,没有必要的情况下千万不要贸然分库分表.真到了非拆不可的时候,一定要结合实际业务,多花点时间做方案预研.像你们这个方案,按日期一天一张表,这完全是拍脑袋想出来的啊,给自己 ...
- python mongodb分页查询_python数据库分页查询语句
用django将数据从数据库提出并分页展示 不要笑这个太简单噢~~大神们路过的请自动忽略本文-- '''django有自带的分页功能,我这个是自己做的分页,效果其实是一样的. ''' 要把数据提出并展 ...
- c mysql数据库函数库查询_Mysql数据库使用concat函数执行SQL注入查询
SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示出来. 例如:原本查询语句是 select userna ...
- mybatis 分页查询_MyBatis之分页查询:MyBatis PageHelper
MyBatis,作为目前流行的ORM框架,大大方便了日常开发.而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐.而MyBatis PageHelper的出现,则解决了这一痛点.这里 ...
- linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06
Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...
- mysql分片库分页查询_Mysql分库分表
一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...
- mysql分页查询所有数据库_MySQL 数据库 分页查询/聚合查询
引言 在本篇博客简单介绍一下分页查询以及聚合查询简单操做.html 分页查询 在MySQL中,分页查询通常都是使用limit子句实现,limit子句声明以下:mysql SELECT * FROM t ...
- mysql 回退查询_MySQL数据库:第十章:分页查询
引入:实际的开发时,一页往往显示不全所有数据,则用到了分页查询 语法: select 查询列表 ⑥ from 表 ① [join 表 ② on 连接条件 ③ where 筛选 ④ group by 分 ...
最新文章
- 深入理解计算机系统读书笔记
- 关于停止发表“每周新闻回顾”的通知
- java集合框架的接口_Java集合框架——Set接口
- 构建集中式会话的分析与实践(一)
- 开课吧:从事数据分析必备能力有哪些?
- Android开发教程:shape和selector的结合使用
- adadelta算法_机器学习中的优化算法(3)-AdaGrad, Adadelta(附Python示例)
- 计算机二级考试科目vfp,计算机二级考试科目及内容
- PHP开发工具phpDesigner 7 (最新版,含注册机)
- 渗透测试-网页接口加密暴破
- tolower c语言,C语言 tolower()用法及代码示例
- 中国民商·商人第一村水稻专属种植基地落户永吉县
- C - Social Distance CodeForces - 1367C
- 《新编计算机科学概论》一第0章 绪 论
- 自学java多久可以工作_自学java,学多久可以自己找到工作?
- 红米k20 android版本,小米红米K20系统版本是多少?
- Spark SQL 外部数据源
- 尚学堂Java学习日记Day1
- 如何高效地使用 OneNote
- 慢启动和拥塞避免算法
热门文章
- 堆排序(利用最大堆)
- python将列表写入csv_转:Python 将列表数据写入文件(txt, csv, excel)
- Linux nano编辑txt文件,Linux 文本编辑器 nano 的简单使用
- 计算机网络系统容错检测,计算机系统的容错技术方法
- python调用zabbixapi接口_python3 + zabbix api 的使用
- linux目录所属用户和组,管理用户所属的用户组《 Linux 文件与目录权限 》
- C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中
- java一维数组的特点,数据结构:java数组特点以及声明数组类
- Introduction to Cryto Crptocurrencies Lecture 1
- stdafx.h 的作用