当前位置: 首页 > 科技观察

MySQLEXPLAIN详解

时间:2023-03-18 11:09:09 科技观察

MySQLEXPLAIN命令是查询性能优化不可或缺的一部分。本文主要讲解explain命令的使用及相关参数说明。EXPLAINOutputColumnsidid用于在整个查询中顺序标识SELECT语句,嵌套查询中id较大的语句先执行。如果此行用于描述其他行的并集结果,则此值可能为NULL。select_type表示查询类型表的对应行正在访问哪个表,表名或别名关联优化器会为查询选择关联顺序,深度靠左的在前。当from有子查询时,表名是derivedN的形式,N指向Subquery,即explain结果的下一列。当有union结果时,表名是union1,2等形式,1,2表示参与union的queryid注意:MySQL把这些表和普通表一样对待,但是这些“临时表”表”没有任何索引。typetype表示访问类型,这是一个比较重要的指标。结果值从好到坏依次为:system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL,一般来说,必须保证query至少达到范围水平,至少它可以达到参考。possible_keys显示查询使用了哪些索引,说明索引可以被高效搜索,但是列出的索引对于后续的优化过程可能没有用。keykey列显示了MySQL实际决定使用的键(索引)。如果未选择索引,则key为NULL。要强制MySQL使用或忽略possible_keys列上的索引,请在查询中使用FORCEINDEX、USEINDEX或IGNOREINDEX。key_lenkey_len列显示了MySQL决定使用的密钥长度。如果key为NULL,则length为NULL。使用的索引的长度。长度越短越好,而且不会损失准确性。refref列显示哪个列或常量与键一起使用以从表中选择行。rowsrows列显示MySQL认为它必须检查以执行查询的行数。请注意,这是一个估计值。ExtraExtra是EXPLAIN输出中另一个非常重要的列。该列显示MySQL在查询过程中的一些详细信息,以及MySQL查询优化器在执行查询过程中对查询计划的重要补充信息。