MYSQL的文件排序(filesort)和索引排序
来源:互联网 发布:python中pipy 编辑:程序博客网 时间:2024/06/03 19:33
什么时候会发生filesort 排序呢
查询索引和order by 的字段不是同一个字段。比如
select * from table where id > 0 order by name;
注意:我们可以通知查询优化器按照我们的逻辑去执行索引,那么上面的sql如果我们调整为
select * from table use index (idx_id) where id > 0 order by name;
其中,idx_name是name的索引,那么查询索引和order by指的还是同一个字段,那么不会进行文件排序,而是索引排序。
什么时候发生索引排序呢?
查询索引和order by的字段是同一个字段。比如:
select * from table where id > 0 order by id
注意:这句话话不总是成立的,因为查询优化器会改写我们的查询sql,让我们的sql按照最优的方式执行,那么
select * from table where id > 0 order by id 的查询按照我们的理解,应该会走索引,但是explain中显示的是filesort,因为这个时候,如果进行索引排序,那么每次顺序扫描下一条索引,就要回表,很多的随机I/O发生。
但是 select id from table where id > 0 order by id 是走索引排序的。
注意:Using where; Using temporary; Using filesort和Using where; Using temporary这两种情况的解说如下:
Using where; Using temporary; Using filesort:表示进行关联查询时(mysql中关联查询的概念要更宽泛,不仅仅指两张表的关联才叫关联查询),使用了临时表,并在生成临时表后,又进行了文件排序;
而Using where; Using temporary表示,仅仅生成了临时表,而没有进行文件排序(在生成临时表的时候已经排序完毕了)。
有人可能注意了:什么时候会Using temporary,比如group by 的时候就会创建临时表,而且group by 一定包含了排序,因此,当group by 字段和查询的字段和order by的字段都是同一个字段时,那么就会发生explain 的Extra列就会出现:Using where; Using temporary(使用了临时表,而且使用了索引排序,而不是文件排序(filesort))。
- MYSQL的文件排序(filesort)和索引排序
- mysql里 filesort排序详解
- MySQL 文件排序 &索引排序
- Order By文件排序和索引排序
- mysql查询优化--临时表和文件排序(Using temporary; Using filesort问题解决)
- Mysql order by排序原理 以及 filesort优化
- MYSQL : innodb 索引排序,文件排序与 建立的索引的关系 分析
- mysql优化(四)mysql优化索引--Using filesort
- mysql 的fileSort
- mysql filesort 的解决方案
- Mysql索引扫描排序
- Mysql-索引排序行
- mysql索引排序
- mysql优化索引 —— Using filesort
- mysql优化索引 —— Using filesort
- MySQL 索引优化 Using where, Using filesort
- MySql索引过滤+排序的一个技巧
- mysql排序字段的索引认识
- linux shell用法(4)-- shell逻辑符号与c兼容方法
- android.content.res.Resources$NotFoundException: String resource ID #0x0异常
- 数据库小析
- Spring AOP
- spring 注解方式配置Bean
- MYSQL的文件排序(filesort)和索引排序
- hdu 1495 非常可乐【bfs】
- 【JDK源码】从JDK/ArrayList源码学习高质量代码
- spring boot实战(第十一篇)初识RabbitMQ
- 【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作
- 如何修改WAMP中mysql默认空密码&重新登录phpmyadmin
- 经典排序算法 - 归并排序Merge sort
- 关于 Android 源码
- 理解:虚拟内存,虚拟内存地址,物理内存,物理内存地址