mysql使用文件排序_Mysql排序FileSort的问题
需求:
有这样一张表(数据有5KW左右),我需要按照时间过滤出一部分数据,然后将这部分数据分页获取;
id 主键
create_date 时间戳 (二级索引)
还有其他几十个字段
问题描述:
我写的SQL大致如下:
SELECT 很多个字段 FROM 表 WHERE create_date <= '2019-05-06' AND create_date >= '2019-05-05' ORDER BY id LIMIT C, S;
create_date 时间过滤,出来的数据大概有40W左右;
Explain 看了一下,会扫描的数据大概在80W左右,还算比较合理;也会走到索引(个人第一直觉就是能用到的两个字段都有索引,不会有撒问题);就上线了;
上线后发现这个语句要执行上千S,顿时就头大了;
问题原因:
只有将SQL再explain一下,看看语句执行的解析过程;发现跟之前看的没撒差别,但是这次我发现最后EXTRA 信息中有个 filesort;之前应该也有,我忽略了;
大致找到问题所在了,使用了内存或磁盘排序,导致数据处理缓慢;
但是这个和我潜意识的想法有点差别,两个列都有索引,为什么会出来filesort呢;
再一看语句执行过程:
1、先通过一个二级索引(create_date)筛选出需要的数据,这个没问题;
2、将筛选出的数据排序,不是有主键索引么?在这难道就走不上了?
第二步过程实际是:
1、通过第一步二级索引得到的主键列表
2、回表查询出筛选出记录的详细信息(这些信息在聚簇索引的叶子节点上)
3、将筛选出的数据排序(filesort)
解决办法:
不使用主键排序,使用查询条件 create_date字段来排序;
这样执行过程大概是:
1、根据create_date(索引)范围查询出合适记录;
2、根据排序方向,过滤出真正需要的数据(这还是二级索引数据集合)
3、回表查询步骤2索引列表的详细信息,并返回;
结论:
WHERE 子句使用的索引,没有在排序中使用到,就会出现filesort;
mysql使用文件排序_Mysql排序FileSort的问题相关推荐
- mysql ibd文件还原_Mysql 通过ibd文件恢复数据
由于未关闭mysql服务就将服务器重启,导致服务器无法重启,使用fsck修复磁盘后启动服务器后,发现mysql数据文件损坏和丢失,但还存在idb文件. 数据库版本:5.7.20 什么是idb文件 如何 ...
- mysql日志文件名字_MySQL各类日志文件相关变量介绍
文章转自:http://www.ywnds.com/?p=3721 查询所有日志的变量 1 mysql>show global variables like'%log%'; GLOBAL表示查全 ...
- mysql库文件修复_mysql数据库文件修复
多数情况下,数据库被破坏只是指索引文件受到了破坏,真正的数据被破坏掉的情况非常少.大多数形式的数据库破坏的的修复相当简单. 和前面的校验一样,修复的方式也有三种. 下面讲的方法只对MyISAM格式的表 ...
- 查看mysql数据库文件命令_MySQL 数据库常用命令
1.MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show ...
- mysql的原理图解_MySQL排序工作原理
在程序设计当中,我们很多场景下都会用 group by 关键字.比如在分页读取数据时,为了避免重复扫描记录,这就是必须要使用 group by 了. 比如我们使用如下 DDL 创建表: CREATET ...
- mysql指令按顺序排列_MySQL 排序 | 菜鸟教程
MySQL 排序 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段 ...
- java对mysql排序_MySQL 排序
假设有 student 表,数据如下: +----+--------+-----+ | id | name | age | +----+--------+-----+ | 1 | 张三 | 18 | ...
- mysql日志文件名称_MySQL 日志文件 说明
MySQL 5.5 官方文档上有关日志的分类: By default, nologs are enabled. The following log-specific sections provide ...
- mysql 的文件介绍_mysql 数据文件介绍
MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩展名为.MYD (MYData).索引文件的扩展名是.MYI (MYInde ...
最新文章
- Javascript基础与面向对象基础~第四讲 Javascript中的类对象
- 函数的初识;函数的返回值;函数的传参
- 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++
- mysql绿色版安装
- Android 中的ORM框架
- 单反相机很久没有更新产品问世了,真的已经被抛弃了吗?
- Swift学习笔记十二
- 解决RStudio(非conda安装)在使用Anaconda中的R环境时,缺失“ libbz2-1.dll ”而不能正常启动问题
- 使用非参数统计检验进行分析的指南
- win32实现两个透明窗口联动
- TT畅聊物联网(一)-初识物联网
- wince之浅谈无线漫游
- ffmpeg命令分析-b:v
- vin码车架号查询易语言代码
- sql compare mysql版本_SQL Compare 13免费版
- Maven配置错误: The JAVA_HOME environment variable is not defined correctly
- kindle导入电子书方法
- 一个三本学生的面试之旅
- uni-app中自定义图表(canvas实现chart图表)开发篇(5)-圆环进度条添加动画效果
- 【SpringBoot进阶】阿里云短信发送配置