当数据很多需要进行分页查询时:需要先查出第一条数据的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数据库分页查询优化相关推荐

  1. mysql 分表 条件查询_mysql分表+查询

    最近面试,问到关与mysql数据库的分表一些问题,如设计一个千万级别的会员数据库,当时想到了分表,但是当问到如何跟据username查询到用户的信息时,这时,有点卡住了,所以为了让自已重新认识分表,而 ...

  2. mysql 分表后查询_Mysql分表后怎么查询效率高?

    胸弟,mysql分表要慎之又慎,没有必要的情况下千万不要贸然分库分表.真到了非拆不可的时候,一定要结合实际业务,多花点时间做方案预研.像你们这个方案,按日期一天一张表,这完全是拍脑袋想出来的啊,给自己 ...

  3. python mongodb分页查询_python数据库分页查询语句

    用django将数据从数据库提出并分页展示 不要笑这个太简单噢~~大神们路过的请自动忽略本文-- '''django有自带的分页功能,我这个是自己做的分页,效果其实是一样的. ''' 要把数据提出并展 ...

  4. c mysql数据库函数库查询_Mysql数据库使用concat函数执行SQL注入查询

    SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示出来. 例如:原本查询语句是 select userna ...

  5. mybatis 分页查询_MyBatis之分页查询:MyBatis PageHelper

    MyBatis,作为目前流行的ORM框架,大大方便了日常开发.而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐.而MyBatis PageHelper的出现,则解决了这一痛点.这里 ...

  6. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06

    Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...

  7. mysql分片库分页查询_Mysql分库分表

    一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...

  8. mysql分页查询所有数据库_MySQL 数据库 分页查询/聚合查询

    引言 在本篇博客简单介绍一下分页查询以及聚合查询简单操做.html 分页查询 在MySQL中,分页查询通常都是使用limit子句实现,limit子句声明以下:mysql SELECT * FROM t ...

  9. mysql 回退查询_MySQL数据库:第十章:分页查询

    引入:实际的开发时,一页往往显示不全所有数据,则用到了分页查询 语法: select 查询列表 ⑥ from 表 ① [join 表 ② on 连接条件 ③ where 筛选 ④ group by 分 ...

最新文章

  1. 深入理解计算机系统读书笔记
  2. 关于停止发表“每周新闻回顾”的通知
  3. java集合框架的接口_Java集合框架——Set接口
  4. 构建集中式会话的分析与实践(一)
  5. 开课吧:从事数据分析必备能力有哪些?
  6. Android开发教程:shape和selector的结合使用
  7. adadelta算法_机器学习中的优化算法(3)-AdaGrad, Adadelta(附Python示例)
  8. 计算机二级考试科目vfp,计算机二级考试科目及内容
  9. PHP开发工具phpDesigner 7 (最新版,含注册机)
  10. 渗透测试-网页接口加密暴破
  11. tolower c语言,C语言 tolower()用法及代码示例
  12. 中国民商·商人第一村水稻专属种植基地落户永吉县
  13. C - Social Distance CodeForces - 1367C
  14. 《新编计算机科学概论》一第0章 绪  论
  15. 自学java多久可以工作_自学java,学多久可以自己找到工作?
  16. 红米k20 android版本,小米红米K20系统版本是多少?
  17. Spark SQL 外部数据源
  18. 尚学堂Java学习日记Day1
  19. 如何高效地使用 OneNote
  20. 慢启动和拥塞避免算法

热门文章

  1. 堆排序(利用最大堆)
  2. python将列表写入csv_转:Python 将列表数据写入文件(txt, csv, excel)
  3. Linux nano编辑txt文件,Linux 文本编辑器 nano 的简单使用
  4. 计算机网络系统容错检测,计算机系统的容错技术方法
  5. python调用zabbixapi接口_python3 + zabbix api 的使用
  6. linux目录所属用户和组,管理用户所属的用户组《 Linux 文件与目录权限 》
  7. C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中
  8. java一维数组的特点,数据结构:java数组特点以及声明数组类
  9. Introduction to Cryto Crptocurrencies Lecture 1
  10. stdafx.h 的作用