mysql优化篇(基于索引)( 二 )


2.2、语句分析当我们找到了我们的哪些慢查询后怎么去分析呢 , 当然是借助explain啦 , 当然还有个帅气的小伙伴 , show profile , 接下来我们就一一介绍 。
回到顶部
2.2.1、explain【mysql优化篇(基于索引)】1、explain可以用来干嘛呢?

  1. 可以知道表的执行顺序
  2. 在sql中哪些索引可以使用
  3. 在sql中哪些索引实际上被用
  4. 数据读取操作的的操作类型
  5. sql中的每个表有多少行数据被优化器查询
  6. 表之间的引用
看完上面可能一脸懵逼吧 , 那就再看一遍 , 然后继续往下看就懂了
2、explain怎么玩呢?
语法:explain +sql查询explain select * from item_description td inner join (select * from item_general where item_id in (select item_id from item where item_id > 332604504321036693 and item_id < 332604504321036710)) tt on tt.item_id=td.item_id;
mysql优化篇(基于索引)文章插图
如上我们先看一个explain+sql;
下面看下explain的具体说明:
1、id:select查询的序号列 , 表示查询select语句中表的执行顺序
  • 当id相同 , 则从上往下执行
  • 如果id不同 , 则从大到小的顺序执行
  • 如果id有相同的也有不同的 , 按照上面两个规则执行 , 先大到小 , 先上到下
2、select_type:表示SELECT语句的类型 。 它可以是以下几种取值:
  • SIMPLE:表示简单查询 , 其中不包括连接查询和子查询;
  • PRIMARY:表示主查询 , 或者是最外层的查询语句 , 最外层查询为PRIMARY , 也就是最后加载的就是PRIMARY;
  • UNION:表示连接查询的第2个或后面的查询语句 ,不依赖于外部查询的结果集
  • DEPENDENT UNION:连接查询中的第2个或后面的SELECT语句 , 依赖于外面的查询;
  • UNION RESULT:连接查询的结果;
  • SUBQUERY:子查询中的第1个SELECT语句;不依赖于外部查询的结果集
  • DEPENDENT SUBQUERY:子查询中的第1个SELECT , 依赖于外面的查询;
  • DERIVED:导出表的SELECT(FROM子句的子查询),MySQL会递归执行这些子查询 , 把结果放在临时表里 。
  • DEPENDENT DERIVED:派生表依赖于另一个表
  • MATERIALIZED:物化子查询
  • UNCACHEABLE SUBQUERY:子查询 , 其结果无法缓存 , 必须针对外部查询的每一行重新进行评估
  • UNCACHEABLE UNION:UNION中的第二个或随后的 select 查询 , 属于不可缓存的子查询
3、table:表示查询的表
4、partitions:查询将从中匹配记录的分区 。 该值适用NULL于未分区的表
5、type:表示表的连接类型