之前上次在部门的分享会上,听了关于MySQL大数据的分页,即怎样使用limit offset,N来进行大数据的分页,现在做一个记录:

首先我们知道,limit offset,N的时候,MySQL的查询效率特别的低,注意是在limit大数据量的时候,测试的表的数据量是1KW条,limit 5000000,N的时候,速度变的非常的慢,当然了offset特别小的时候,查询的速度没有什么差别。那我们来想一下什么没原因造成的?

那其实原因就是MySQL并不是跳过offset行,然后单取N行,而是取offset+N行,然后返回放弃前offset行,返回N行,所以这样的话,查询的效率就特别的低,那当offset特别大的时候,效率就非常的低下。

优化的办法:

1.我们从业务的逻辑上进行解决,比如说不允许翻页超过100页,比如百度的分页才只有79页,所以我们没有必要去分那么多的页,这个是从业务的逻辑上来进行控制的。

2.我们可以试着不用limit进行查询数据。

我们来看一下用了offset和不用offset两者的一个对比:

mysql> select id,name from logs limit 5000000,10;
+---------+--------------------------------------------+
| id | name |
+---------+--------------------------------------------+
| 5554609 | 新闻 |
..................
| 5554618 | 股票信息 |
+---------+--------------------------------------------+
10 rows in set (5.33 sec) mysql> select id,name from logs where id>5000000 limit 10;
+---------+--------------------------------------------------------+
| id | name |
+---------+--------------------------------------------------------+
| 5000001 | 互联网金融 |
.................
| 5000002 | P2P理财 |
+---------+--------------------------------------------------------+
10 rows in set (0.00 sec)

那么我们明显的观察到两者的时间差了整整的5倍多。

但我们同时也发现,2次查询的结果是不一样的,那这是因为我们的数据中间有被物理删除过,数据出现了空洞。

解决的方法就是:数据我们一般不进行物理删除,我们可以进行逻辑删除,最终在页面上显示数据的时候,逻辑删除的条目不显示即可。(一般来说,大网站的数据都是不物理删除的,只做逻辑删除)

那我们再想一种比较极端的思路,如果我们非要物理删除数据,还不限制用户进行分页,那怎么办?

那我们尽量的只查有索引的ID,通过索引查出来的id,速度非常的快,然后我们再根据查出来的id,进行回行一次性的取具体的数据。这就是延迟索引。

MySQL大数据分页的优化思路和索引延迟关联的更多相关文章

  1. mysql 大数据分页优化

    一.mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from prod ...

  2. java+Mysql大数据的一些优化技巧

    众所周知,java在处理数据量比较大的时候,加载到内存必然会导致内存溢出,而在一些数据处理中我们不得不去处理海量数据,在做数据处理中,我们常见的手段是分解,压缩,并行,临时文件等方法; 例如,我们要将 ...

  3. mysql大数据量下优化

    1 优化sql和索引2 增加缓存如:redis3 主从复制或主主复制,读写分离4 利用mysql自带分区表5 先做垂直拆分,将一个大系统分为多个小系统,也就是分布式6 水平切分,要选择一个合理的sha ...

  4. mysql 大数据分页查询优化

    应用场景: 当有一张表的数据非常大,需要使用到分页查询,分页查询在100w条后查询效率非常低: 解决方案: 1.业务层解决:只允许用户翻页一百页以内,十条一页: 2.使用where id > 5 ...

  5. mysql分页查询优化(索引延迟关联)

    对于web后台报表导出是一种常见的功能点,实际对应服务后端即数据库的排序分页查询.如下示例为公司商户积分报表导出其中一个sql ,当大批量的导出请求进入时候,mysql的cpu急剧上升瞬间有拖垮库的风 ...

  6. 【1】MySQL大数据量分页查询方法及其优化

    ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千 ...

  7. MySQL大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化   ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...

  8. MySQL大数据量分页性能优化

    mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...

  9. MySQL大数据量分页查询

    mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 测试实验 1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from p ...

随机推荐

  1. 传智播客JavaWeb day06-jstl

    一.jsp标签(sun公司提供的) 二.EL表达式 三.jstl (javaserver pages standard tag library) 1.为什么要有jstl jsp标签太弱,el表达式功能 ...

  2. IOS 在控制器间跳转实现过渡动画

    已经掌握了CALayer下的CATransition动画在同一个控制器下实现,但是在不同控制器间跳转又该如何实现呢? MyViewController *myVC = [[MyViewControll ...

  3. 数据库使用fmdb

    #import "SQLdataManger.h" #import "FMDatabaseAdditions.h" static SQLdataManger * ...

  4. 看啦这么就别人的博客 我也来写一篇! Object转换其他类型

    package com.sinitek.framework.util; import java.math.BigDecimal;import java.sql.Timestamp;import jav ...

  5. 腾讯优测-优社区干货精选 |  那些年,我们在Android机型适配上遇到的坑之Camera拍照时快门咔嚓声

    文/腾讯优测研发工程师 吴宇焕 优测小优有话说: android机型适配的坑自然是不少,不想掉坑快来优测优社区~ 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想 ...

  6. Android使用echarts框架的K线图

    百度echarts框架还是比较强大的,之前有尝试使用它,但毕竟主要使用于web网页端,效果不是很好,所以最终还是取消使用echarts 但之前在使用的过程中遇到些问题,虽然解决很简单,但也花了我不少时 ...

  7. ural 1057Amount of Degrees ——数位DP

    link:http://acm.timus.ru/problem.aspx?space=1&num=1057 论文: 浅谈数位类统计问题  刘聪 #include <iostream&g ...

  8. Linux字符界面的优势

    优势一:字符界面占用的系统资源更少,更加适合服务器 优势二:字符界面减少了出错.被攻击的可能性(一.二决定了服务器一般不装图形界面,安全稳定优先)

  9. IplImage 结构解读(转)

    typedef struct _IplImage { int nSize;                             /* IplImage大小 */ int ID;           ...

  10. git相关

    进入到想要用git管理的project目录下 1.git init 意即该目录会被git监视一切的变动 同时生成一个.git文件夹下面存放了管理该project的一切必要信息 2.git add &l ...