扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇文章给大家分享的是有关MySQL查询优化explain命令是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
公司主营业务:成都网站设计、做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出莎车免费做网站回馈大家。
mysql查询优化的方法有很多种,explain是工作当中用的比较多的一种检查方式。explain翻译即解释,就是看mysql语句的查询解释计划,从解释计划我们能很清楚的看到解释的语句有没有合理用到索引,扫描了多少行数,有没有触及全表扫描、用到临时表等影响慢查询的原因。
使用很简单,如
explainselect * from user ...
执行后会出现解释计划的表格,意义可参考下面的参数,针对这些解释计划,我们可以作为相对应的优化。
id mysql查询标识符,即序号。
select_type 查询类型
simple:即简单select 查询,不包含union及子查询;
primary:最外层的 select 查询;
union:表示此查询是 union 的第二或随后的查询;
dependent union:union 中的第二个或后面的查询语句, 取决于外面的查询;
union result:union的结果;
subquery:子查询中的第一个select;
dependent subquery:子查询中的第一个select,取决于外面的查询,即子查询依赖于外层查询的结果。
table 所有查询到的表。
type 联接类型,比较重要的项,从这一项可以看出是否高效的重要依据
性能从好到坏依次如下:
system:表中只有一条数据,这是一个特殊的const 类型;
const:针对主键或唯一索引的等值查询扫描,最多只返回一行数据,const 查询速度非常快,因为它仅仅读取一次即可;
eq_ref:此类型通常出现在多表的 join 查询,表示对于前表的每一个结果,都只能匹配到后表的一行结果,并且查询的比较操作通常是=, 查询效率较高;
ref:此类型通常出现在多表的 join 查询, 针对于非唯一或非主键索引, 或者是使用了 最左前缀 规则索引的查询;
fulltext:全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引;
ref_or_null:与ref方法类似,只是增加了null值的比较。实际用的不多;
unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值;
index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重;
index_merge:表示查询使用了两个以上的索引,最后取交集或者并集,常见and,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取所个索引,性能可能大部分时间都不如range;
range:表示使用索引范围查询,通过索引字段范围获取表中部分数据记录。这个类型通常出现在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN操作中,此时输出的 ref 字段为 NULL并且key_len字段是此次查询中使用到的索引的最长的那个;
index:全表扫描,只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序,但是开销仍然非常大,这种情况时, Extra 字段会显示 Using index;
all:性能最差的情况,使用了全表扫描,系统必须避免出现这种情况。
possible_keys 可能用到的索引。
key 真正用到的索引。
key_len 使用了索引字节的长度。
ref 显示索引的哪一列被使用了。
rows 扫描了多少行数,也是性能评估的重要依据。
extra 额度信息,常见的有以下几种。
Distinct:一旦找到了与行相联合匹配的行就不再搜索了;
Using filesort:使用了文件排序,性能非常慢,需要优化。
Using index:查询使用到了索引,列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候。
Using temporary:使用了临时表排序,性能非常慢,需要优化。
Using where:表示使用了where进行查询,不是很重要。
ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,需要优化。
以上就是mysql查询优化explain命令是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流