- eq_ref:对于前面每个表中记录的组合,都从这个表里读取一条记录。该类型可用于对索引列使用
=操作符进行比较时。
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:对于前面每个表中记录的组合,从该表读取所有所有匹配到的索引记录。ref 用于 JOIN 使用使用非主键或唯一索引列时,或只使用键的前缀的场景。
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;
- fulltext:JOIN 使用的是 FULLTEXT 类型的索引
- ref_or_null:类似 ref,但会对 NULL 值做额外的查询。这种类型的 JOIN 优化常用于子查询,以下的示例 MySQL 全会使用 ref_or_null 联表来处理 ref_table :
SELECT * FROM ref_table WHERE key_column=expr OR key_column IS NULL;
-
index_merge:表示将会运用索引合并这一优化方式,详见 Section 8.2.1.3, “Index Merge Optimization”。
-
unique_subquery:替换某些场景下 IN 语句中子查询的 eq_ref 类型的联表。
-
index_subquery:类似 unique_subquery,替换 IN 子查询,但作用于非唯一性索引(nonunique indexes)。
value IN (SELECT key_column FROM single_table WHERE some_expr)
- range:只返回范围内的记录。
- index:同 ALL 类型,但只使用索引来搜索。
- ALL:查询时进行全表扫描。
相关资源
- 13.8.2 EXPLAIN Syntax
- Explain Vs Desc anomalies in mysql
- 8.8.2 EXPLAIN Output Format
MySQL EXPLAIN 语句
标签:hub enter ext enc sim filter from cti reference