mysql索引

在 MySQL 中,通过 EXPLAIN 关键字可以分析查询语句的执行计划,其中返回的各个字段都有特定含义。以下是常见字段的解释:


常见字段解释

字段名含义
id 查询执行的序列号,标识查询中的步骤。通常,数字越大,表示优先级越低。对于复杂的查询(如子查询或联合查询),会有多个 id 值。
select_type 查询的类型,表示当前查询的具体操作类型。常见值包括:- SIMPLE:简单查询,无子查询或联合查询。- PRIMARY:主查询(外层查询)。- SUBQUERY:子查询。- UNION:联合查询的第二个或之后的查询。
table 正在访问的表的名称或别名。
partitions 如果使用了分区表,这里会显示查询涉及的分区。
type 访问类型,表示查询中表的访问方式,从效率低到高排列为:- ALL:全表扫描。- index:索引全扫描。- range:范围扫描。- ref:使用普通索引查询。- eq_ref:唯一索引查询,效率较高。- const/system:仅查询一行,效率最高。
possible_keys 查询中可能用到的索引,列出 MySQL 认为可以优化该查询的索引列表。
key 实际使用的索引名称。如果是 NULL,表示未使用索引。
key_len 使用索引的长度(字节数),显示索引中实际参与查询的字段的长度。
ref 显示索引列与查询条件中的哪些列或常量进行比较。例如:const 表示和常量值比较。
rows 估算的扫描行数,表示 MySQL 预计需要读取的行数,用来评估查询的开销。
filtered 表示返回的行数占扫描行数的百分比。例如,filtered=50 表示 50% 的行符合查询条件。
Extra 其他执行信息。常见值包括:- Using index:查询只使用了索引,不需要访问表的数据。- Using where:需要额外过滤条件。- Using temporary:使用了临时表。- Using filesort:需要额外的排序操作。

字段详细说明

  1. type(访问类型)

    • ALL:全表扫描,性能最差。
    • index:扫描索引,比全表扫描快,但仍需要读取索引中的所有值。
    • range:索引范围扫描,用于 <, >, BETWEEN, IN 等条件。
    • ref:非唯一索引查询,匹配一个或多个值。
    • eq_ref:使用唯一索引,返回单条记录,效率较高。
    • const/system:仅需读取一行即可,通常发生在主键或唯一索引查询中。
  2. key(实际使用的索引)

    • 显示查询中实际用到的索引名称。如果是 NULL,表示查询未使用任何索引。
  3. key_len(索引长度)

    • 表示查询中使用的索引部分的字节长度。通过它可以判断查询是否充分利用了索引。
    • 例如:对索引字段 VARCHAR(50) 进行查询,如果查询只用到了前 10 个字符,则 key_len 可能为 30 字节(假设字符集为 utf8)。
  4. rows(扫描行数)

    • MySQL 优化器估算的行数。通常 rows 值越小,查询性能越好。
  5. Extra(额外信息)

    • Using index:说明查询使用了覆盖索引,不需要回表查询。
    • Using where:表示查询还需要通过 WHERE 条件进行过滤。
    • Using temporary:说明查询使用了临时表,通常出现在分组或排序操作中。
    • Using filesort:表示 MySQL 需要额外的排序步骤,不是通过索引完成的,性能较低。

优化查询的目标

  • 减少 rows:通过索引限制扫描的行数。
  • 提升 type 的级别:优先使用高效的访问类型(如 const, eq_ref, ref)。
  • 避免 Extra 中的临时表和文件排序:优化查询和索引设计,尽量避免出现 Using temporaryUsing filesort
  • 充分利用索引:确保 key 字段显示了合适的索引,并且 key_len 表示完整使用了索引。

通过分析执行计划的字段,可以发现查询中的瓶颈,并通过索引设计和 SQL 调优提高查询性能。

posted @   芯下雪  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示