索引覆盖
含义:所要查询的数据直接在索引树中就可以获取到, 而不需要扫描数据.
如果要使用覆盖索引,要注意SELECT 列表值取出需要的列,不可以是SELECT *,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。
EXPLAIN命令
MySQL提供的EXPLAIN命令可以对SELECT语句进行分析,使用时只需要在常规的SELECT语句前加上EXPLAIN,输出的内容包括:
id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.
select_type: SELECT 查询的类型,SIMPLE表示此查询不包含 UNION 查询或子查询
table: 查询的是哪个表
partitions: 匹配的分区
type: join 类型,用于判断查询是否高效。const表示针对主键或唯一索引的等值查询扫描, 最多只返回一行数据. const 查询速度非常快, 因为它仅仅读取一次即可。
index: 表示全索引扫描(full index scan),仅仅扫描所有的索引, 而不扫描数据. index 类型通常出现在: 所要查询的数据直接在索引树中就可以获取到, 而不需要扫描数据. 当是这种情况时, Extra 字段 会显示 Using index.
ALL表示全表扫描, 这个类型的查询是性能最差的查询之一。
possible_keys: 此次查询中可能选用的索引
key: 此次查询中确切使用到的索引.
ref: 哪个字段或常数与 key 一起被使用
rows: 显示此查询一共扫描了多少行. 这个是一个估计值.
filtered: 表示此查询条件所过滤的数据的百分比
extra: 额外的信息
链接:https://segmentfault.com/a/1190000008131735