首页 > 其他分享 >EXPLAIN字段解析

EXPLAIN字段解析

时间:2024-08-26 17:25:32浏览次数:14  
标签:EXPLAIN 查询 索引 字段 id 主键 解析 ref 分区

在这里插入图片描述

一 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(仅使用索引)等

标签:EXPLAIN,查询,索引,字段,id,主键,解析,ref,分区
From: https://blog.csdn.net/weixin_45655599/article/details/141568588

相关文章

  • 【文档智能 & RAG】浅看开源的同质化的文档解析框架-Docling
    前言RAG的兴起,越来越多的人开始关注文档结构化解析的效果,这个赛道变得非常的同质化。关于文档智能解析过程中的每个技术环节的技术点,前期文章详细介绍了很多内容:下面我们简单的看看Docling这个PDF文档解析框架里面都有什么技术。方法布局分析模型首先,Docling使用一......
  • 学懂C++(四十四):C++ 自定义内存管理的深入解析:内存池与自定义分配器
    目录1.内存池(MemoryPool)概念模型特点核心点实现适用场景经典示例实现代码解析2.自定义分配器(CustomAllocators)概念模型特点核心点实现适用场景经典示例实现代码解析高级自定义分配器示例代码解析总结        C++作为一种高性能编程语言,在......
  • 网站提示431 Request Header Fields Too Large:请求头字段太大怎么办
    当遇到“431RequestHeaderFieldsTooLarge”错误时,这意味着客户端发送的请求头中的一个或多个字段超过了服务器允许的最大长度。这种情况通常发生在请求头中的某个字段(如Cookie或Authorization)过长时。解决方案检查请求头确认请求头中的字段是否过长。特别注意Cook......
  • 全面解析:前端调用接口常见HTTP状态码及其含义
    前端在调用接口时,通常会遇到不同的HTTP状态码。每个状态码都代表了服务器对客户端请求的不同响应。以下是常见的HTTP状态码及其含义:1xx信息响应100Continue:服务器已经接收到请求头,客户端应继续发送请求主体。101SwitchingProtocols:服务器同意客户端请求切换协议。......
  • 掌握时间的艺术:Python的sched库深度解析
    文章目录掌握时间的艺术:Python的sched库深度解析背景:为何选择sched?什么是sched库?如何安装sched库?简单库函数使用方法1.创建调度器实例2.安排事件3.取消事件4.运行调度器5.检查事件是否在队列中场景应用1.定时提醒2.定时备份3.定时关闭程序常见Bug及解决方案1.......
  • dpdk解析报文协议-基于l2fwd
    dpdk解析报文协议-基于l2fwd0前置条件1、这里需要两台虚拟机,配置了相同的虚拟网络,可以通过tcpreplay在一台虚拟机回放报文,在另一台虚拟机通过tcpdump-i网卡名捕获到。具体配置可参考https://www.jb51.net/server/2946942fw.htm2、需要dpdk环境配置完成3、大致了解计算......
  • 聚合函数COUNT()用法解析
    在数据分析工作中,我们常用聚合函数COUNT()统计一些特定条件的行数。常用的用法有如下三种:COUN(*)COUNT(1)COUNT(字段)那它们三者的区别在哪里呢。COUNT(*)用来计算表中所有行的数量,包括那些包含NULL值的行。COUNT(1)也用于计算所有行的数量,它也不会忽略任何行。COUNT(字段)......
  • 【HuggingFace Transformers】BertSelfAttention源码解析
    BertSelfAttention源码解析1.BertSelfAttention类介绍1.1关键组件1.2主要方法2.BertSelfAttention类源码解析(核心简版)3.BertSelfAttention类源码解析1.BertSelfAttention类介绍BertSelfAttention类是BERT模型的核心组件之一,主要负责实现多头自注意力......
  • Objective-C 中的系统调用术:NSTask 深度解析
    标题:Objective-C中的系统调用术:NSTask深度解析在Objective-C开发中,有时我们需要执行外部程序或命令行工具来完成特定的任务,如运行脚本、调用系统服务或执行自定义命令。NSTask是Foundation框架中一个用于创建和管理系统命令的类,它允许开发者在应用中启动和控制外部......
  • CSS定位指南:深入解析position属性的奥秘
    标题:CSS定位指南:深入解析position属性的奥秘CSS中的position属性是控制元素布局的强大工具,它决定了元素在页面上的定位方式。通过不同的值,position属性可以创建静态、相对、绝对、固定或粘性定位效果。本文将深入探讨position属性的不同值及其使用场景,并通过代码示例展示如......