需求:

有这样一张表(数据有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的问题相关推荐

  1. mysql ibd文件还原_Mysql 通过ibd文件恢复数据

    由于未关闭mysql服务就将服务器重启,导致服务器无法重启,使用fsck修复磁盘后启动服务器后,发现mysql数据文件损坏和丢失,但还存在idb文件. 数据库版本:5.7.20 什么是idb文件 如何 ...

  2. mysql日志文件名字_MySQL各类日志文件相关变量介绍

    文章转自:http://www.ywnds.com/?p=3721 查询所有日志的变量 1 mysql>show global variables like'%log%'; GLOBAL表示查全 ...

  3. mysql库文件修复_mysql数据库文件修复

    多数情况下,数据库被破坏只是指索引文件受到了破坏,真正的数据被破坏掉的情况非常少.大多数形式的数据库破坏的的修复相当简单. 和前面的校验一样,修复的方式也有三种. 下面讲的方法只对MyISAM格式的表 ...

  4. 查看mysql数据库文件命令_MySQL 数据库常用命令

    1.MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show ...

  5. mysql的原理图解_MySQL排序工作原理

    在程序设计当中,我们很多场景下都会用 group by 关键字.比如在分页读取数据时,为了避免重复扫描记录,这就是必须要使用 group by 了. 比如我们使用如下 DDL 创建表: CREATET ...

  6. mysql指令按顺序排列_MySQL 排序 | 菜鸟教程

    MySQL 排序 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段 ...

  7. java对mysql排序_MySQL 排序

    假设有 student 表,数据如下: +----+--------+-----+ | id | name | age | +----+--------+-----+ | 1 | 张三 | 18 | ...

  8. mysql日志文件名称_MySQL 日志文件 说明

    MySQL 5.5 官方文档上有关日志的分类: By default, nologs are enabled. The following log-specific sections provide ...

  9. mysql 的文件介绍_mysql 数据文件介绍

    MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩展名为.MYD (MYData).索引文件的扩展名是.MYI (MYInde ...

最新文章

  1. Javascript基础与面向对象基础~第四讲 Javascript中的类对象
  2. 函数的初识;函数的返回值;函数的传参
  3. 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++
  4. mysql绿色版安装
  5. Android 中的ORM框架
  6. 单反相机很久没有更新产品问世了,真的已经被抛弃了吗?
  7. Swift学习笔记十二
  8. 解决RStudio(非conda安装)在使用Anaconda中的R环境时,缺失“ libbz2-1.dll ”而不能正常启动问题
  9. 使用非参数统计检验进行分析的指南
  10. win32实现两个透明窗口联动
  11. TT畅聊物联网(一)-初识物联网
  12. wince之浅谈无线漫游
  13. ffmpeg命令分析-b:v
  14. vin码车架号查询易语言代码
  15. sql compare mysql版本_SQL Compare 13免费版
  16. Maven配置错误: The JAVA_HOME environment variable is not defined correctly
  17. kindle导入电子书方法
  18. 一个三本学生的面试之旅
  19. uni-app中自定义图表(canvas实现chart图表)开发篇(5)-圆环进度条添加动画效果
  20. 【SpringBoot进阶】阿里云短信发送配置

热门文章

  1. Error: Plugin/Preset files are not allowed to export objects, only functions……
  2. DPG图片压缩技术和webp图片格式
  3. pdf是什么意思中文
  4. 退休前后,工资差距有多大?
  5. Exynos1080处理器性能与功耗究竟怎么样?
  6. 肌肉男比常人多了哪些烦恼?
  7. 俯首甘为孺子牛上一句是什么
  8. 2K分辨率下1070TI更换2080S能有多大提升,值得换吗?
  9. Currently, the Linux Mint team has 21 members
  10. 简单了解 Tendermint