EXPLAIN字段解析

在这里插入图片描述

一 id

查询的标识符。若有子查询,则每个查询都有唯一的 ID。

二 select_type

zhch
简单查询SIMPLE
主查询PRIMARY
子查询SUBQUERY

三 table

表名,表示正在访问哪张表。

四 partitions

定义:显示查询访问的表的分区名。如果表没有分区,该字段通常为NULL。
用途:分区可以提高查询性能,尤其是在处理大数据集时。它允许数据库按特定字段将表划分为多个部分,使得查询时只需访问相关的分区而不是整个表。

4.1 mysql分区实现

在 MySQL 中,表分区可以通过分区表的功能来实现。以下是实现表分区的步骤和示例:

4.1.1 创建分区表

在创建表时,可以指定分区方案。常见的分区类型包括:
RANGE:基于连续的值划分分区。
LIST:基于特定的值列表划分。
HASH:基于哈希函数生成的值。
KEY:使用 MySQL 内部的哈希函数。

示例:使用 RANGE 分区

CREATE TABLE sales (
    id INT,
    sale_date DATE,
    amount DECIMAL(10, 2),
    PRIMARY KEY (id, sale_date)
) PARTITION BY RANGE (YEAR(sale_date)) (
    PARTITION p2021 VALUES LESS THAN (2022),
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p2023 VALUES LESS THAN (2024)
);
4.1.2 向分区表中插入数据

插入数据时,MySQL 会根据定义的分区自动将数据放入相应的分区。

INSERT INTO sales (id, sale_date, amount) VALUES
(1, '2021-06-15', 100.00),
(2, '2022-07-20', 150.00),
(3, '2023-01-05', 200.00);
4.1.3 查询分区表

查询时,MySQL 会根据条件只访问相关的分区,从而提高查询效率。

SELECT * FROM sales WHERE sale_date BETWEEN '2022-01-01' AND '2022-12-31';
4.1.4 修改分区

可以使用 ALTER TABLE 语句添加、删除或修改分区。

示例:添加新分区

ALTER TABLE sales ADD PARTITION (
    PARTITION p2024 VALUES LESS THAN (2025)
);

五 type

zhch
system表只有一行
const表中有常量的条件,最多只返回一行
eq_ref每个行的数据只返回一行
ref非唯一索引,返回匹配的行
range范围扫描,使用了索引
index全索引扫描
ALL全表扫描,最不优

eq_ref 定义
每个行的数据只返回一行:意味着对于每一行来自左表(或主表)的数据,右表(或副表)只会返回一行匹配记录。这种连接方式通常发生在使用主键或唯一索引进行查找时。
何时使用 eq_ref
条件:当你对两个表进行 JOIN 时,如果右表的连接条件使用了主键或唯一索引,MySQL 会使用 eq_ref 进行访问。
性能:eq_ref 是访问方式中最有效的之一,因为它取决于索引,只查找特定的行,不进行全表扫描。

示例
假设有两个表:orders(order_id 是主键)和 customers(customer_id 是主键)。

SELECT *
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;

在这个查询中,如果 customer_id 在 customers 表中是主键,EXPLAIN 的输出可能显示 type 为 eq_ref,表示对 customers 表的访问使用了主键索引,并且对于每个 orders 表的行,只会返回 customers 表中匹配的一行。

六 possible_keys

显示可能用于查询的索引

七 key

实际使用的索引

八 key_len

用的索引长度,表示执行是利用的索引的字节数。

九 ref

显示哪个列或常量与索引结合使用。

十 rows

表示估计访问的行数

十一 filtered

定义:这个值表示在查询过程中,经过条件筛选后,实际满足条件的行的比例。
范围:通常是一个百分比,表示将要处理的行中有多少比例最终会被实际返回。
示例:如果 filtered 值为 50,意味着在扫描的行中,有 50% 的行会被查询返回
性能优化:较低的 filtered 值可能表示需要对查询条件进行优化,以减少不必要的数据处理。
查询分析:通过查看 filtered 值,可以判断条件选择是否有效,是否需要添加索引来提高效率。

十二 Extra

额外的信息,如使用的附加操作,如 Using where(使用 WHERE 子句过滤),Using index(仅使用索引)等

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值