首页 > 其他分享 >explain执行计划

explain执行计划

时间:2024-10-16 08:50:43浏览次数:9  
标签:字节 explain 查询 索引 计划 key mysql 执行 id

1、id

id不是唯一标识,是执行的优先级,id越大,优先级越高。id如果想等,谁在前面谁先执行

2、select_type:

simple:简单查询,不包含子查询和union
primary:复杂查询中最外层的select
subquery:包含在select中的子查询(不在from中)

derived:包含在from子句中的查询。Mysql会将结果放在一个临时表中,也称为派生表(derived的英文含义)

3、type

这一列表示关联类型或者访问类型,即mysql决定如何查找表的行,查找数据行记录的大概范围

依次从最优到最差分别为:system>const>eq_ref>ref>range>index>all(全表扫描)

一般来说,要保证达到range级别,最好达到ref

NULL:mysql能够在优化节点分解查询语句,在执行节点用不着在访问表或索引。例如:

要在执行时访问表:

1、const和system

mysql能对查询的某些部分进行优化并转为一个常量(show warnings可以查看),用于primary key或者unique key的所有列和常数比较时。表最多有一个匹配行,读取一次,速度比较快。其中system时const的特例,表中只有一条元素匹配时为system

2、eq_ref

primary_key或者unique_key索引的所有部分被连接使用,最多返回一条符合条件的记录。

3、ref

ref不使用唯一索引,而使用普通索引或者唯一索引的部分前缀,索引要和某个值比较,可能会找到多个符合条件的行。

1、select查询,name是普通索引

2、关联表查询

        idx_film_actor_id是film_id和actor_id的联合索引,这里使用到了filme_actor的左边前缀fim_id部分。

3、range

范围扫描通常在in(),between,等操作中,使用一个索引来检索给定范围的行。

4、index

扫描全索引就能得到结果,一般是扫描某一二级索引,这种扫描不会从索引的根节点开始快速查找,而实直接对二级索引的叶子节点遍历和扫描,速度较慢,这种查询一般是覆盖索引,二级索引一般比较小,比all快

5、all

全表扫描,扫描聚簇索引的所有叶子节点

4、posiable_key,key

分别代表sql在分析时可能使用的索引和实际使用的索引。

5、key_len

显示的是mysql在索引中使用的字节数,通过这个数值可以算出具体使用了索引中的哪些列

计算规则如下:

  • 字符串
    • char(n):n代表长度
    • varchar(n):如果是utf-8,长度为3n+2,加的2字节用来存储字符串长度
  • 数值类型
    • tinyint:1字节
    • smallint:2字节
    • int:4字节
    • bigint:8字节
  • 时间类型
    • date:3字节
    • datetime:4字节
    • timestamp:4字节
  • 如果字段允许为null,需要1个字节记录是否为null

索引的最大长度为768字节,当字符串过长时,mysql会做一个类似做一个左缀索引的处理,将前半部分的字符提取出来左索引

6、Extra列

  • Using index:使用覆盖索引
    • 覆盖索引定义:mysql执行计划explain结果中的key有使用索引,如果select后面查询的字段都可以从这个索引的树中获取,一般可以说用到了覆盖索引,extra里一般都有using index;覆盖索引一般针对的是辅助索引,整个查询结果只通过辅助索引就能拿到结果;不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段
  • Using where:使用where语句来处理结果,并且查询的列并未被索引覆盖
  • Using index condition:查询的列不完全被索引覆盖,where条件时一个前导列的范围
  • Using temporary: mysql需要创建一张临时表来处理查询。出现这种情况一般需要优化,首先使用索引优化
  • Using filesort:将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一般也是要考虑使用索引来优化的。
  • Select tables optimized away:使用某些聚合函数(比如 max、min)来访问存在索引的某个字段

标签:字节,explain,查询,索引,计划,key,mysql,执行,id
From: https://blog.csdn.net/weixin_42923363/article/details/142911481

相关文章

  • React 基础阶段学习计划
    React基础阶段学习计划目标能够创建和使用React组件。理解并使用State和Props。掌握事件处理和表单处理。学习内容环境搭建安装Node.js和npm访问Node.js官网下载并安装最新版本的Node.js。打开终端或命令行工具,输入node-v和npm-v检查是否安装成功。使用Crea......
  • Gateway过滤器执行顺序以及跨域问题
    执行顺序请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执......
  • [Python手撕]执行操作使频率分数最大
    给你一个下标从0开始的整数数组nums和一个整数k。你可以对数组执行至多k次操作:从数组中选择一个下标i,将nums[i]增加或者减少1。最终数组的频率分数定义为数组中众数的频率。请你返回你可以得到的最大频率分数。众数指的是数组中出现次数最多的数。一个......
  • 5.7 生产计划问题
    importnumpyasnpdemands=[40,60,80]max_production=100total_demand=sum(demands)dp=np.full((4,total_demand+1),float('inf'))dp[0][0]=0prev_production=np.full((4,total_demand+1),-1)foriinrang......
  • 【无人机路径规划】实现有效的水陆两栖无人机任务规划和执行(Matlab实现)(含粒子群优化和
     ......
  • RabbitMQ执行流程
    RabbitMQ由生产者(Publisher)、消费者(Consumer)、交换机(Exchange)、队列(Queue)和绑定(Binding)组件组成。执行流程为:1、创建连接(Connection) ·生产者和消费者都需要创建到RabbitMQ服务器的TCP连接。2、创建信道(Channel) ·在RabbitMQ中,每个连接可以开设多个信道,信道是进行......
  • 如何在 Jupyter Notebook 执行和学习 SQL 语句(上)—— 基本原理详解和相关库安装篇
            近期我找工作很多岗位问到sql,由于我简历上有写,加上我实习的时候确实运用了,所以我还是准备复习一下SQL语句,常见的内容,主要包括一些内容,比如SQL基础(主要是取数select,毕竟用的时候基本上不会让我一个实习生进行一个删除之类的操作)和一些进阶的用法比如窗口函数之......
  • 利用香港多IP服务器建站蜘蛛池执行SEO策略的实践
    在当今数字化时代,搜索引擎优化(SEO)已经成为吸引网站流量、提升在线业务可见性的关键策略。香港多IP服务器因其地理位置优势和网络环境的优越性,成为执行SEO战略的理想选择。以下是利用香港多IP服务器执行SEO策略的实践:地理位置和本地化策略:利用香港多IP服务器时,要考虑地理位......
  • django异步情况下执行orm操作
    importasynciofromchannels.dbimportdatabase_sync_to_asyncfrom.modelsimportConversationclassLlmConsumer(AsyncWebsocketConsumer):def__init__(self,*args,**kwargs):super().__init__(args,kwargs)self.chat_id=None......
  • pyaudio无法使用sudo执行:OSError: [Errno -9996] Invalid input device (no default o
    项目背景在树莓派上通过语音控制ws2812b灯带,使用 pyaudio 作为语音输入,使用 rpi_ws281x 控制灯带的颜色。问题描述目前出现的问题是由于rpi_ws281x使用PWM引脚,需要使用sudo来执行,但是pyaudio使用sudo执行时会报错:OSError:[Errno-9996]Invalidinputdevice(no......