0%

索引覆盖

索引覆盖

含义:所要查询的数据直接在索引树中就可以获取到, 而不需要扫描数据.

如果要使用覆盖索引,要注意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