技术开发 频道

MySQL优化总结

  const用于用常数值比较PRIMARY KEY或UNIQUE索引的所有部分时。在下面的查询中,tbl_name可以用于const表:

  SELECT * from tbl_name WHERE primary_key=1;

  SELECT * from tbl_name

  WHERE primary_key_part1=1和 primary_key_part2=2;

  ⊙eq_ref

  对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY。

  eq_ref可以用于使用= 操作符比较的带索引的列。比较值可以为常量或一个使用在该表前面所读取的表的列的表达式。

  在下面的例子中,MySQL可以使用eq_ref联接来处理ref_tables:

  SELECT * FROM ref_table,other_table

  WHERE ref_table.key_column=other_table.column;

  SELECT * FROM ref_table,other_table

  WHERE ref_table.key_column_part1=other_table.column

  AND ref_table.key_column_part2=1;

  ⊙ref

  对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。

  ref可以用于使用=或<=>操作符的带索引的列。

  在下面的例子中,MySQL可以使用ref联接来处理ref_tables:

  SELECT * FROM ref_table WHERE key_column=expr;

  SELECT * FROM ref_table,other_table

  WHERE ref_table.key_column=other_table.column;

  SELECT * FROM ref_table,other_table

  WHERE ref_table.key_column_part1=other_table.column

  AND ref_table.key_column_part2=1;

  ⊙ref_or_null

  该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。

1
相关文章