Mysql千万级别数据如何 做分页?
后端开发中为了防止⼀次性加载太多数据导致内存、磁盘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列可能出现的值及含义:
- Using where:表示优化器需要通过索引回表查询数据。
- Using index:即覆盖索引,表示直接访问索引就⾜够获取到所需要的数据,不需要通过索引回表,通常是通过将待查询字段建⽴联合索引实现。
- Using index condition:在5.6版本后加⼊的新特性,即⼤名鼎鼎的索引下推,是MySQL关于减少回表次数的重大优化。
- 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千万级别数据如何 做分页?相关推荐
- MYSQL千万级别数据量迁移Elasticsearch5.6.1实战
从关系型库中迁移数据算是比较常见的场景,这里借助两个工具来完成本次的数据迁移,考虑到数据量并不大(不足两千万),未采用snapshot快照的形式进行. 欢迎加入我的星球 Elasticsearch-j ...
- mysql插入数据返回主键值_Mysql千万级别数据批量插入只需简单三步!
第一步:配置my.ini文件 文件中配置 bulk_insert_buffer_size=120M 或者更大 将insert语句的长度设为最大. Max_allowed_packet=1M Net_b ...
- mysql数据库千万级别数据的查询优化和分页测试
原文地址:原创 mysql数据库千万级别数据的查询优化和分页测试作者:于堡舰 本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处 http://blog.sina.co ...
- B+Tree索引为什么可以支持千万级别数据量的查找——讲讲mysql索引的底层数据结构
MySQL索引底层数据结构 索引是存储引擎快速找到记录的一种数据结构 一. 有索引与没索引的差距 先来看一张图: 左边是没有索引的情况,右边是作为col2字段 二叉树索引的情况. 假如执行查找(假设表 ...
- php超大树形分页,PHP+MySql千万级数据limit分页优化方案
PHP+MySql千万级数据limit分页优化方案 1年前 阅读 2750 评论 0 喜欢 0 ### 原因 徒弟突然有个需求,就是他发现limit分页,页数越大之后,mysql的消耗越大,查询时间越 ...
- MySQL千万级别表数据中提高RAND随机查询的实验
1,准备测试数据 1.1 建库建表 mysql> create database hwdb; Query OK, 1 row affected (0.34 sec) mysql> mysq ...
- 基于easyexcel的MySQL百万级别数据的excel导出功能
前言 最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了. 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助. 原始需求:用户在U ...
- 千万级别数据查询优化_MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...
- MySQL千万级别大表如何优化?
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
最新文章
- 总结一下对buffer的学习体会
- 【迁移学习(Transfer L)全面指南】2021年迁移学习发展现状及案例探究
- LeetCode Reconstruct Original Digits from English
- MySQL常用存储引擎之Innodb
- oracle 用户管理
- Quartz框架初学1
- DataTable 和 DataView 的理解
- python datetime.datetime.now_python时间日期datetime模块
- pic单片机汇编 c语言,PIC单片机汇编语言指令详解
- Opencv之threshold
- 他一定幸福地生活在那里
- pubwinol免刷_Pubwin万象OL实名一键自动处理程序
- java调用高德地图API
- 【烈日炎炎战后端 】MyBatis(0.4万字)
- python第三方插件登录网易音乐_项目实战 | Python开发网易云音乐插件
- MPTCP iperf 发包方式
- 证明DES解密算法实际上是DES加密算法的逆
- 数智商业创新的强大力量,用友BIP如何构筑产业互联网?
- 密码学——复杂度问题
- 手机照片局部放大镜_PPT用了这么多年,竟然还不知道放大镜是这么做的!好惭愧…...