音乐网站是否可以做浅度链接,rss wordpress,炫酷文字制作网站,网站有源码之后怎么建设网站一. 执行计划能告诉我们什么#xff1f;
SQL如何使用索引联接查询的执行顺序查询扫描的数据函数
二. 执行计划中的内容 SQL执行计划的输出可能为多行#xff0c;每一行代表对一个数据库对象的操作
1. ID列
ID列中的如果数据为一组数字#xff0c;表示执行SELECT语句的顺…一. 执行计划能告诉我们什么
SQL如何使用索引联接查询的执行顺序查询扫描的数据函数
二. 执行计划中的内容 SQL执行计划的输出可能为多行每一行代表对一个数据库对象的操作
1. ID列
ID列中的如果数据为一组数字表示执行SELECT语句的顺序如果为NULL则说明这一行数据是由另外两个SQL语句进行 UNION操作后产生的结果集ID值相同时说明SQL执行顺序是按照显示的从上至下执行的ID值不同时ID值越大代表优先级越高则越先被执行
演示 可以看到上面的执行计划返回了3行结果id列的值可以看作是SQL中所具有的SELECT操作的序号 由于上述SQL中只有一个SELECT所以id全为1因此我们就要按照由上至下读取执行计划 按照我们的SQL语句我们会认为执行顺序是a,b,c,但是通过上图可以发现Mysql并不是完成按照SQL中所写的顺序来进行表的关联操作的 执行对表的执行顺序为a,c,b这是由于MySQL优化器会根据表中的索引的统计信息来调整表关联的实际顺序
2. SELECT_TYPE列
值含义SIMPLE不包含子查询或是UNION操作的查询PRIMARY查询中如果包含任何子查询那么最外层的查询则被标记为PRIMARYSUBQUERYSELECT 列表中的子查询DEPENDENT SUBQUERY依赖外部结果的子查询UNIONUnion操作的第二个或是之后的查询的值为unionDEPENDENT UNION当UNION作为子查询时第二或是第二个后的查询的select_type值UNION RESULTUNION产生的结果集DERIVED出现在FROM子句中的子查询
3. TABLE列
包含以下几种结果 输出去数据行所在表的名称如果表取了别名则显示的是别名 union M,N 由ID为M,N查询union产生的结果集 derived N/subquery N 由ID为N的查询产生的结果
4. PARTITIONS列: 查询匹配的记录来自哪一个分区 对于分区表显示查询的分区ID 对于非分区表显示为NULL
5. TYPE列
按性能从高至低排列如下
值含义system这是const联接类型的一个特例当查询的表只有一行时使用const表中有且只有一个匹配的行时使用如对主键或是唯一索引的查询这是效率最高的联接方式eq_ref唯一索引或主键索引查询对应每个索引键表中只有一条记录与之匹配ref非唯一索引查找返回匹配某个单独值的所有行ref_or_null类似于ref类型的查询但是附加了对NULL值列的查询index_merge该联接类型表示使用了索引合并优化方法range索引范围扫描常见于between、、这样的查询条件indexFULL index Scan 全索引扫描同ALL的区别是遍历的是索引树ALLFULL TABLE Scan 全表扫描这是效率最差的联接方式
6. Extra列
包含MySQL如何执行查询的附加信息
值含义Distinct优化distinct操作在找到第一个匹配的元素后即停止查找Not exists使用not exists来优化查询Using filesort使用额外操作进行排序通常会出现在order by或group by查询中Using index使用了覆盖索引进行查询Using temporaryMySQL需要使用临时表来处理查询常见于排序子查询和分组查询Using where需要在MySQL服务器层使用WHERE条件来过滤数据select tables optimized away直接通过索引来获得数据不用访问表这种情况通常效率是最高的
7. POSSIBLE_KEYS列
指出MySQL能使用哪些索引来优化查询查询列所涉及到的列上的索引都会被列出但不一定会被使用
8. KEY列
查询优化器优化查询实际所使用的索引如果表中没有可用的索引则显示为NULL如果查询使用了覆盖索引则该索引仅出现在Key列中
9. KEY_LEN列
显示MySQL索引所使用的字节数在联合索引中如果有3列假如3列字段总长度为100个字节Key_len显示的可能会小于100字节比如30字节这就说明在查询过程中没有使用到联合索引的所有列只是利用到了前面的一列或2列
表示索引字段的最大可能长度Key_len的长度由字段定义计算而来并非数据的实际长度
10. Ref列
表示当前表在利用Key列记录中的索引进行查询时所用到的列或常量
11. rows列
表示MySQL通过索引的统计信息估算出来的所需读取的行数关联查询时显示的是每次嵌套查询时所需要的行数Rows值的大小是个统计抽样结果并不十分准确
12. Filtered列
表示返回结果的行数占需读取行数的百分比Filtered列的值越大越好值越大表明实际读取的行数与所需要返回的行数越接近Filtered列的值依赖统计信息所以同样也不是十分准确只是一个参考值
三. 执行计划的限制
无法展示存储过程触发器UDF对查询的影响无法使用EXPLAIN对存储过程进行分析早期版本的MySQL只支持对SELECT语句进行分析