explain显示了mysql如何运用索引来处理select语句以及衔接表。能够协助挑选更好的索引和写出更优化的查询语句。
运用方法,在select语句前加上explain就能够了:
如:explainselectsurname,first_name form a,bwherea.id=b.id
EXPLAIN列的解释:
table:显示这一行的数据是关于哪张表的
type:这是首要的列,显示衔接运用了何种类型。从最好到最差的衔接类型为const、eq_reg、ref、range、indexhe和ALL
possible_keys:显示能够运用在这张表中的索引。假设为空,没有能够的索引。能够为有关的域从WHERE语句中挑选一个合适的语句
key: 理论运用的索引。假设为NULL,则没有运用索引。很少的情况下,MYSQL会挑选优化缺乏的索引。这种情况下,能够在SELECT语句中运用USE INDEX(indexname)来强迫运用一个索引或许用IGNORE INDEX(indexname)来强迫MYSQL疏忽索引
key_len:运用的索引的长度。在不耗损准确性的情况下,长度越短越好
ref:显示索引的哪一列被运用了,假设能够的话,是一个常数
rows:MYSQL以为必需检验的用来前往央求数据的行数
Extra:关于MYSQL如何分析查询的额定信息。将在表4.3中探讨,但这里能够看到的坏的例子是Using temporary和Using filesort,意思MYSQL基本不能运用索引,结果是检索会很慢
extra列前往的描画的意义
Distinct:一旦MYSQL找到了与行相结合婚配的行,就不再搜索了
Not exists: MYSQL优化了LEFT JOIN,一旦它找到了婚配LEFT JOIN规范的行,就不再搜索了
Range checked for each Record(index map:#):没有找到理想的索引,因而关于从先面表中来的每一个行组合,MYSQL检验运用哪个索引,并用它来从表中前往行。这是运用索引的最慢的衔接之一
Using filesort: 看到这个的时分,查询就须要优化了。MYSQL须要执行额定的步骤来发觉如何对前往的行排序。它依据衔接类型以及存储排序键值和婚配条件的一切行的行指针来排序一切行