• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > Mysql之EXPLAIN显示using filesort介绍

Mysql之EXPLAIN显示using filesort介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql using filesort,using filesort,mysql filesort,mysql filesort 优化,mysql explain等相关知识,希望本文的分享对您有所帮助
语法格式如下
EXPLAIN tbl_name
或者:
EXPLAIN SELECT select_options
EXPLAIN 语句可以被当作 DESCRIBE 的同义词来用,也可以用来获取一个MySQL要执行的 SELECT 语句的相关信息。

EXPLAIN tbl_name 语法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一样。

当在一个 SELECT 语句前使用关键字 EXPLAIN 时,MYSQL会解释了即将如何运行该 SELECT 语句,它显示了表如何连接、连接的顺序等信息。

以下信息为引用:

在explain我们所使用的sql的时候,经常会遇到using filesort这种情况,原以为是由于有相同列值的原因引起,结果昨天看到公司的一个sql,跟同事讨论了下加上自己又做了一些测试,突然发现自己原来的想法是错误的。

首先,只有在order by 数据列的时候才可能会出现using filesort,而且如果你不对进行order by的这一列设置索引的话,无论列值是否有相同的都会出现using filesort。因此,只要用到order by 的这一列都应该为其建立一个索引。

其次,在这次测试中,使用了一个稍微有点复杂的例子来说明这个问题,下面详细用这个例子说一下:

SELECT * FROM DB.TB WHERE ID=2222 AND FID IN (9,8,3,13,38,40) ORDER BY INVERSE_DATE LIMIT 0, 5
里面建立的索引为一个三列的多列索引:IDX(ID,FID ,INVERSE_DATE) 。INVERSE_DATE这个是时间的反向索引。

对于这个sql我当时最开始认为应该是个优化好的状态,应该没有什么纰漏了,结果一explain才发现竟然出现了:Using where; Using filesort。

为什么呢,后来经过分析才得知,原来在多列索引在建立的时候是以B-树结构建立的,因此建立索引的时候是先建立ID的按顺序排的索引,在相同ID的情况下建立FID按 顺序排的索引,最后在FID 相同的情况下建立按INVERSE_DATE顺序排的索引,如果列数更多以此类推。有了这个理论依据我们可以看出在这个sql使用这个IDX索引的时候只是用在了order by之前,order by INVERSE_DATE 实际上是using filesort出来的。。汗死了。。因此如果我们要在优化一下这个sql就应该为它建立另一个索引IDX(ID,INVERSE_DATE),这样就消除了using filesort速度也会快很多。问题终于解决了。 </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Mysql之EXPLAIN显示using filesort介绍
  • 浅谈mysql数据库中的using的用法

相关文章

  • 2018-12-05关于列变行的10篇文章推荐
  • 2018-12-05Oracle字符集修改查看方法
  • 2018-12-05Access的平均间隔控件使用
  • 2018-12-05一次SQL调优数据库性能问题后的过程(300W)
  • 2018-12-05有关mysql_num_fields()函数的文章推荐10篇
  • 2018-12-05删除表数据零基础入门教程汇总
  • 2017-05-11对MySQL几种联合查询的通俗解释
  • 2018-12-05对mysql语句的性能分析与优化
  • 2018-12-05详细介绍MySQL之-Centos安装多个mysql数据库的配置实例
  • 2018-12-05 MySQL之——MySQL Cluster集群搭建详解(基于RPM安装包 双管理中心)

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Oracle数据库密码文件的使用和维护
    • MySQL基础教程mysql5.7.18安装和连接
    • MySQL中在查询结果集中得到记录行号的方法
    • vs10安装之后一些列问题
    • MySQL中查询的有关英文字母大小写问题的分析
    • Mac系统下MySql下载MySQL5.7及安装图解
    • 删除表数据零基础入门教程汇总
    • mysql的索引设计原则以及常见索引的区别的简单介绍
    • 深入理解SQL中的Null
    • mysql字符集乱码问题解决方法介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有