怎么在MySQL数据库中执行计划

  介绍

今天就跟大家聊聊有关怎么在MySQL数据库中执行计划,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1只;解释输出列

怎么在MySQL数据库中执行计划

说下几个关键的列:

<李>

类型:连接类型

<李>

possible_keys:可选的索引

<李>

关键:实际执行时使用的索引

<李>

裁判:裁判列显示将哪些列或常量与前面键列中显示的命名的索引进行比较以从表中选择行

<李>

行:行列表示MySQL认为执行查询必须检查的行数

2只;连接类型

连接类型,顺序从最好到最差,依次是:,

系统表只有一行。这是常量和类型的特例。

const

表最多有一个匹配行,在查询开始时读取。因为只有一行,所以这一行中的列的值可以被优化器的其余部分视为常量.const表非常快,因为它们只被读取一次。

当你用主键或唯一索引的所有部分与常量值进行比较时,将使用常量。

例如,下面的表tbl_name可以被当做const表:

SELECT  *,得到tbl_name  WHERE  primary_key=1;   SELECT  *,得到tbl_name  WHERE  primary_key_part1=1,以及primary_key_part2=2,

eq_ref

对于前表中的每一行组合,从这个表中读取一行。除了系统和常量类型,这是可能的最好的联接类型。当一个索引的所有部分都被联接使用并且索引是主键或唯一的NOT NULL索引时,使用它。

eq_ref可以用于使用=操作符进行比较的索引列。比较值可以是一个常量,也可以是使用在此表之前读取的表中的列的表达式。

例如,下面的例子中MySQL可以使用eq_ref连接来处理ref_table:

SELECT  *,得到ref_table other_table   ,WHERE  ref_table.key_column=other_table.column;      SELECT  *,得到ref_table other_table   ,WHERE  ref_table.key_column_part1=other_table.column 以及ref_table.key_column_part2=1;

ref

对于前表中的行的每种组合,将从该表中读取具有匹配索引值的所有行。如果联接仅使用关键的最左前缀,或者如果关键不是主键或唯一索引(换句话说,如果联接无法基于关键值选择单个行),则使用ref。如果使用的关键仅匹配几行,则这是一种很好的联接类型。

ref可用于使用=或& lt;=祝辞运算符进行比较的索引列。

例如,下面的例子中,MySQL可以用ref连接来处理ref_table:

SELECT  *,得到ref_table  WHERE  key_column=expr;      SELECT  *,得到ref_table other_table   ,WHERE  ref_table.key_column=other_table.column;      SELECT  *,得到ref_table other_table   WHERE  ref_table.key_column_part1=other_table.column   ref_table.key_column_part2害=1;

全文

使用全文索引执行连接

ref_or_null

这种连接类型类似于裁判,但是MySQL会额外搜索包含空值的行。此联接类型优化最常用于解析子查询。

例如,下面的例子中,MySQL可以使用ref_or_null来处理ref_table:

SELECT  *,得到ref_table  WHERE  key_column=expr 或是key_column  IS 零;

index_merge

这种连接类型表明使用了索引合并优化。在这种情况下,输出行中列的关键包含使用的索引列表,而key_len包含所使用索引的最关键长部分列表。

unique_subquery

此类型将eq_ref替换为以下形式的某些在子查询:

value 拷贝(SELECT  primary_key 得到single_table  WHERE  some_expr)

index_subquery

与unique_subquery类似,它代替了在子查询,但适用于以下形式的子查询中的非唯一索引:

value 拷贝(SELECT  key_column 得到single_table  WHERE  some_expr)

范围只检索给定范围内的行,并使用索引来选择行。输出行中的关键列指示使用了哪个索引.key_len包含所使用的最长的关键部分。对于这种类型,参考列为NULL。

使用=& lt;,祝辞,比;=& lt; & lt;=零,& lt;=祝辞,之间,或在()运算符将关键列与常量进行比较时,可以使用范围:

SELECT  *,得到tbl_name  WHERE  key_column =, 10;      SELECT  *,得到tbl_name  WHERE  key_column 结构;10,以及20;      SELECT  *,得到tbl_name  WHERE  key_column 拷贝(10年,20年,30);      SELECT  *,得到tbl_name  WHERE  key_part1 =, 10,以及key_part2 拷贝(10年,20年,30);

怎么在MySQL数据库中执行计划