后端开发中为了防止⼀次性加载太多数据导致内存、磁盘IO都开销过⼤,经常需要分⻚展示,这个时候就需要⽤到MySQL的LIMIT关键字。但你以为LIMIT分⻚就万事大吉了么,LIMIT在数据量⼤的时候极可能造成深度分页问题。

例如,上图,我们在查user表时,mysql会先根据条件去磁盘检索得到符合条件的所有数据,然后在到内存中去做相应的排序和分页,最后得到一页数据返回,如果当我们数据达到千万级别时,仅用limit,当查询的条件多且大时,将会造成灾难性的后果,此时,我们如何解决呢?

例如,我们通过explain分析深度分⻚查询问题 **explain select * from user
where age>10 and age<90000000 order by age desc limit
8000000,10000;**执⾏计划Extra列可能出现的值及含义:

  1. Using where:表示优化器需要通过索引回表查询数据。
  2. Using index:即覆盖索引,表示直接访问索引就⾜够获取到所需要的数据,不需要通过索引回表,通常是通过将待查询字段建⽴联合索引实现。
  3. Using index condition:在5.6版本后加⼊的新特性,即⼤名鼎鼎的索引下推,是MySQL关于减少回表次数的重大优化。
  4. Using filesort:⽂件排序,这个⼀般在ORDER BY时候,数据量过大,MySQL会将所有数据召回内存中排序,比较消耗资源。

解决方案
通过主键索引优化
在查询条件中带上主键索引 explain select * from user where id>{maxId(即上一页最大的id} age>10 and age<90000000 order by
age desc limit 8000000,10000;
显然这种方法具有缺陷性,当我们的主键不是自增的,就会失效
2.Elastic Search搜索引擎优化(倒排索引)
实际上类似于淘宝这样的电商基本上都是把所有商品放进ES搜索引擎⾥的(那么海量的数据,放进MySQL是不可能的,放进Redis也不现实)。但即使⽤了ES搜索引擎,也还是有可能发⽣深度分⻚的问题的,这时怎么办呢?答案是通过游标scroll

Mysql千万级别数据如何 做分页?相关推荐

  1. MYSQL千万级别数据量迁移Elasticsearch5.6.1实战

    从关系型库中迁移数据算是比较常见的场景,这里借助两个工具来完成本次的数据迁移,考虑到数据量并不大(不足两千万),未采用snapshot快照的形式进行. 欢迎加入我的星球 Elasticsearch-j ...

  2. mysql插入数据返回主键值_Mysql千万级别数据批量插入只需简单三步!

    第一步:配置my.ini文件 文件中配置 bulk_insert_buffer_size=120M 或者更大 将insert语句的长度设为最大. Max_allowed_packet=1M Net_b ...

  3. mysql数据库千万级别数据的查询优化和分页测试

    原文地址:原创 mysql数据库千万级别数据的查询优化和分页测试作者:于堡舰  本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处  http://blog.sina.co ...

  4. B+Tree索引为什么可以支持千万级别数据量的查找——讲讲mysql索引的底层数据结构

    MySQL索引底层数据结构 索引是存储引擎快速找到记录的一种数据结构 一. 有索引与没索引的差距 先来看一张图: 左边是没有索引的情况,右边是作为col2字段 二叉树索引的情况. 假如执行查找(假设表 ...

  5. php超大树形分页,PHP+MySql千万级数据limit分页优化方案

    PHP+MySql千万级数据limit分页优化方案 1年前 阅读 2750 评论 0 喜欢 0 ### 原因 徒弟突然有个需求,就是他发现limit分页,页数越大之后,mysql的消耗越大,查询时间越 ...

  6. MySQL千万级别表数据中提高RAND随机查询的实验

    1,准备测试数据 1.1 建库建表 mysql> create database hwdb; Query OK, 1 row affected (0.34 sec) mysql> mysq ...

  7. 基于easyexcel的MySQL百万级别数据的excel导出功能

    前言 最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了. 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助. 原始需求:用户在U ...

  8. 千万级别数据查询优化_MySQL大数据量分页查询方法及其优化

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

  9. MySQL千万级别大表如何优化?

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

最新文章

  1. 总结一下对buffer的学习体会
  2. 【迁移学习(Transfer L)全面指南】2021年迁移学习发展现状及案例探究
  3. LeetCode Reconstruct Original Digits from English
  4. MySQL常用存储引擎之Innodb
  5. oracle 用户管理
  6. Quartz框架初学1
  7. DataTable 和 DataView 的理解
  8. python datetime.datetime.now_python时间日期datetime模块
  9. pic单片机汇编 c语言,PIC单片机汇编语言指令详解
  10. Opencv之threshold
  11. 他一定幸福地生活在那里
  12. pubwinol免刷_Pubwin万象OL实名一键自动处理程序
  13. java调用高德地图API
  14. 【烈日炎炎战后端 】MyBatis(0.4万字)
  15. python第三方插件登录网易音乐_项目实战 | Python开发网易云音乐插件
  16. MPTCP iperf 发包方式
  17. 证明DES解密算法实际上是DES加密算法的逆
  18. 数智商业创新的强大力量,用友BIP如何构筑产业互联网?
  19. 密码学——复杂度问题
  20. 手机照片局部放大镜_PPT用了这么多年,竟然还不知道放大镜是这么做的!好惭愧…...

热门文章

  1. Android OpenCV Native C++实现灰度图片
  2. vue-print-nb如何打印隐藏dom
  3. 解决eslint 报错的方法
  4. 以太坊免费获取测试币
  5. r语言实现模糊c均值算法,R语言基本统计分析方法(包及函数)
  6. tim android8.1,QQ for Android v8.1.5 正式版发布
  7. Git Bash 窗口下无法复制粘贴的问题解决
  8. “餐饮+” 的困境及解决方案
  9. 2021年办专利要多少钱
  10. KPI Scorecard - 基础应用