Mysql之 optimizer_trace 相关总结
Mysql之 optimizer_trace 相关总结
MySQL官网介绍:https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_OPT_TRACE.html
1. 简介
MySQL优化器可以生成Explain执行计划,通过执行计划查看sql是否使用了索引,使用了哪种索;
但是有些时候,你会发现为什么没想按照我们所想的思路执行:
为什么会使用这个索引 ?!
为什么没有使用添加的索引 ?!
于是,MySQL5.6版本之后开始引入 optimizer trace(优化器追踪),它可以查看优化器生成执行计划的整个过程,以及做出的各种决策,包括访问表的方法、各种开销计算、各种转换等等,帮助我们更好的去优化sql。
另外,optimizer_trace的开关默认是关闭的 ,开启trace工具会影响mysql性能,所以只适合临时分析sql使用,用完之后最好及时关闭。
2. 使用方法
1. 查看optimizer trace配置
show variables like '%optimizer_trace%';
查询结果:

查询结果字段说明:
- optimizer_trace: 主配置,enabled的on表示开启,off表示关闭,one_line表示是否展示成一行
- optimizer_trace_features: 表示优化器的可选特性,包括贪心搜索、范围优化等
- optimizer_trace_limit: 表示优化器追踪最大显示数目,默认是1条
- optimizer_trace_max_mem_size: 表示优化器追踪占用的最大容量
- optimizer_trace_offset: 表示显示的第一个优化器追踪的偏移量
2. 开启/关闭 optimizer trace
#开启trace
set session optimizer_trace="enabled=on",end_markers_in_json=on;
#关闭trace
set session optimizer_trace="enabled=off";
3. 执行需要进行分析的SQL语句
select * from test0816 where name > 'a' order by remark;
4. 使用optimizer trace查看优化器的选择过程
SELECT * FROM information_schema.OPTIMIZER_TRACE;
查询结果:

查询结果对应字段说明:
- QUERY: 表示我们执行的查询语句
- TRACE: 优化器生成执行计划的过程(重点关注)
- MISSING_BYTES_BEYOND_MAX_MEM_SIZE: 优化过程其余的信息会被显示在这一列
- INSUFFICIENT_PRIVILEGES: 表示是否有权限查看优化过程,0是,1否
5. 分析
trace的内容:
{"steps": [{"join_preparation": {"select#": 1,"steps": [{"expanded_query": "/* select#1 */ select `test0816`.`id` AS `id`,`test0816`.`name` AS `name`,`test0816`.`age` AS `age`,`test0816`.`remark` AS `remark`,`test0816`.`create_time` AS `create_time` from `test0816` where (`test0816`.`name` > 'a') order by `test0816`.`remark`"}] /* steps */} /* join_preparation */},{"join_optimization": {"select#": 1,"steps": [{"condition_processing": {"condition": "WHERE","original_condition": "(`test0816`.`name` > 'a')","steps": [{"transformation": "equality_propagation","resulting_condition": "(`test0816`.`name` > 'a')"},{"transformation": "constant_propagation","resulting_condition": "(`test0816`.`name` > 'a')"},{"transformation": "trivial_condition_removal","resulting_condition": "(`test0816`.`name` > 'a')"}] /* steps */} /* condition_processing */},{"substitute_generated_columns": {} /* substitute_generated_columns */},{"table_dependencies": [{"table": "`test0816`","row_may_be_null": false,"map_bit": 0,"depends_on_map_bits": [] /* depends_on_map_bits */}] /* table_dependencies */},{"ref_optimizer_key_uses": [] /* ref_optimizer_key_uses */},{"rows_estimation": [{"table": "`test0816`","range_analysis": {"table_scan": {"rows": 3,"cost": 2.65} /* table_scan */,"potential_range_indexes": [{"index": "PRIMARY","usable": false,"cause": "not_applicable"},{"index": "idx_name_age_remark","usable": true,"key_parts": ["name","age","remark","id"] /* key_parts */}] /* potential_range_indexes */,"setup_range_conditions": [] /* setup_range_conditions */,"group_index_range": {"chosen": false,"cause": "not_group_by_or_distinct"} /* group_index_range */,"skip_scan_range": {"potential_skip_scan_indexes": [{"index": "idx_name_age_remark","usable": false,"cause": "query_references_nonkey_column"}] /* potential_skip_scan_indexes */} /* skip_scan_range */,"analyzing_range_alternatives": {"range_scan_alternatives": [{"index": "idx_name_age_remark","ranges": ["a < name"] /* ranges */,"index_dives_for_eq_ranges": true,"rowid_ordered": false,"using_mrr": false,"index_only": false,"in_memory": 1,"rows": 3,"cost": 1.31,"chosen": true}] /* range_scan_alternatives */,"analyzing_roworder_intersect": {"usable": false,"cause": "too_few_roworder_scans"} /* analyzing_roworder_intersect */} /* analyzing_range_alternatives */,"chosen_range_access_summary": {"range_access_plan": {"type": "range_scan","index": "idx_name_age_remark","rows": 3,"ranges": ["a < name"] /* ranges */} /* range_access_plan */,"rows_for_plan": 3,"cost_for_plan": 1.31,"chosen": true} /* chosen_range_access_summary */} /* range_analysis */}] /* rows_estimation */},{"considered_execution_plans": [{"plan_prefix": [] /* plan_prefix */,"table": "`test0816`","best_access_path": {"considered_access_paths": [{"rows_to_scan": 3,"access_type": "range","range_details": {"used_index": "idx_name_age_remark"} /* range_details */,"resulting_rows": 3,"cost": 1.61,"chosen": true,"use_tmp_table": true}] /* considered_access_paths */} /* best_access_path */,"condition_filtering_pct": 100,"rows_for_plan": 3,"cost_for_plan": 1.61,"sort_cost": 3,"new_cost_for_plan": 4.61,"chosen": true}] /* considered_execution_plans */},{"attaching_conditions_to_tables": {"original_condition": "(`test0816`.`name` > 'a')","attached_conditions_computation": [] /* attached_conditions_computation */,"attached_conditions_summary": [{"table": "`test0816`","attached": "(`test0816`.`name` > 'a')"}] /* attached_conditions_summary */} /* attaching_conditions_to_tables */},{"optimizing_distinct_group_by_order_by": {"simplifying_order_by": {"original_clause": "`test0816`.`remark`","items": [{"item": "`test0816`.`remark`"}] /* items */,"resulting_clause_is_simple": true,"resulting_clause": "`test0816`.`remark`"} /* simplifying_order_by */} /* optimizing_distinct_group_by_order_by */},{"reconsidering_access_paths_for_index_ordering": {"clause": "ORDER BY","steps": [] /* steps */,"index_order_summary": {"table": "`test0816`","index_provides_order": false,"order_direction": "undefined","index": "idx_name_age_remark","plan_changed": false} /* index_order_summary */} /* reconsidering_access_paths_for_index_ordering */},{"finalizing_table_conditions": [{"table": "`test0816`","original_table_condition": "(`test0816`.`name` > 'a')","final_table_condition ": "(`test0816`.`name` > 'a')"}] /* finalizing_table_conditions */},{"refine_plan": [{"table": "`test0816`","pushed_index_condition": "(`test0816`.`name` > 'a')","table_condition_attached": null}] /* refine_plan */},{"considering_tmp_tables": [{"adding_sort_to_table": "test0816"} /* filesort */] /* considering_tmp_tables */}] /* steps */} /* join_optimization */},{"join_execution": {"select#": 1,"steps": [{"sorting_table": "test0816","filesort_information": [{"direction": "asc","expression": "`test0816`.`remark`"}] /* filesort_information */,"filesort_priority_queue_optimization": {"usable": false,"cause": "not applicable (no LIMIT)"} /* filesort_priority_queue_optimization */,"filesort_execution": [] /* filesort_execution */,"filesort_summary": {"memory_available": 262144,"key_size": 400,"row_size": 1091,"max_rows_per_buffer": 15,"num_rows_estimate": 15,"num_rows_found": 3,"num_initial_chunks_spilled_to_disk": 0,"peak_memory_used": 32800,"sort_algorithm": "std::sort","sort_mode": "<fixed_sort_key, packed_additional_fields>"} /* filesort_summary */}] /* steps */} /* join_execution */}] /* steps */
}
一共是3个阶段:
- join_preparation:sql准备阶段,sql格式化;
- join_optimization: sql分析优化阶段,是分析OPTIMIZER TRACE的重点。这段一般都比较长,分很多步,需要细看;
- join_execution: sql执行阶段;
其中的相关关键字解析:
//TODO
结论:全表扫描的成本低于索引扫描,所以MySQL最终选择全表扫描。
相关文章:
Mysql之 optimizer_trace 相关总结
Mysql之 optimizer_trace 相关总结 MySQL官网介绍:https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_OPT_TRACE.html 1. 简介 MySQL优化器可以生成Explain执行计划,通过执行计划查看sql是否使用了索引,使用了哪种索; 但…...
【Linux命令详解 | wget命令】 wget命令用于从网络下载文件,支持HTTP、HTTPS和FTP协议
文章标题 简介一,参数列表二,使用介绍1. 基本文件下载2. 递归下载整个网站3. 限制下载速率4. 防止SSL证书校验5. 断点续传6. 指定保存目录7. 自定义保存文件名8. 增量下载9. 使用HTTP代理10. 后台下载 总结 简介 在编程世界中,处理网络资源是…...
DockePod信号处理机制与僵尸进程优化
Docke&Pod信号处理与僵尸进程优化 容器与信号的关系 SIGTERM信号:程序结束(terminate)信号,这是用来终止进程的标准信号,也是 kill 、 killall 、 pkill 命令所发送的默认信号。与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程…...
NetApp StorageGRID 对象存储,使您能够跨公有、私有云和混合多云环境管理非结构化数据
NetApp StorageGRID 对象存储,使您能够跨公有、私有云和混合多云环境管理非结构化数据 主要优势 智能:了解行业领先的数据生命周期管理软件。 • 借助 NetApp StorageGRID 基于对象的存储解决方案的数据管理功能、您可以从大型非结构化数据中获得高价值…...
使用Java服务器实现UDP消息的发送和接收(多线程)
目录 简介:1. 导入必要的库2. 创建服务器端代码3. 创建客户端代码4. 实现多线程处理5. 测试运行示例代码:函数说明服务器端代码说明:客户端代码说明: 总结: 简介: 在本篇博客中,我们将介绍如何…...
Linux--查看端口占用情况
查看端口占用情况 在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询 netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示UDP…...
微信小程序|自定义弹窗组件
目录 引言小程序的流行和重要性自定义弹出组件作为提升用户体验和界面交互的有效方式什么是自定义弹出组件自定义弹出组件的概念弹出层组件在小程序中的作用和优势为什么需要自定义弹出组件现有的标准弹窗组件的局限性自定义弹出组件在解决这些问题上的优势最佳实践和注意事...
【数据结构】实现顺序表
目录 一.介绍顺序表二.实现顺序表1.创建多文件2.顺序表的存储方式3.函数的声明4.初始化顺序表5.清理顺序表6.打印顺序表7.扩容8.尾插8.尾删9.头插10.头删11.查找12.修改13.在pos位置插入13.在pos位置删除 三.全部代码1.SeqList.h2.SeqList.c3.Test.c 一.介绍顺序表 顺序表是用…...
【嵌入式环境下linux内核及驱动学习笔记-(19)LCD驱动框架2-FrameBuffer】
目录 1、 Frmebuffer(帧缓冲)操作介绍1.1 显示设备的抽象1.2 内存映像1.3 输出画面数据1.4 用户态下操作屏显1.4.1 用文件I / O 操作屏显1.4.2 mmap() 函数1.4.3 ioctl()函数1.4.5 用命令操作屏1.4.6 测试程序 2、Framebuffer总体框架2.1 框架要点2.2 fbmem.c分析2.…...
自己动手写数据库系统:实现一个小型SQL解释器(中)
我们接上节内容继续完成SQL解释器的代码解析工作。下面我们实现对update语句的解析,其语法如下: UpdateCmd -> INSERT | DELETE | MODIFY | CREATE Create -> CreateTable | CreateView | CreateIndex Insert -> INSERT INTO ID LEFT_PARAS Fie…...
HTML 与 XHTML 二者有什么区别
HTML 与 XHTML 二者有什么区别,你觉得应该使用哪一个并说出理由。 HTML 与 XHTML 之间的差别,主要分为功能上的差别和书写习惯的差别两方面。 关于功能上的差别,主要是 XHTML 可兼容各大浏览器、手机以及 PDA,并且浏览器也能快速正…...
fiddler抓包问题记录,支持https、解决 tunnel to 443
fiddler下载安装步骤及基本配置 fiddler抓包教程,如何抓取HTTPS请求,详细教程 可能遇到的问题及解决方案 1. 不能正常访问页面(所有https都无法访问) 解决方案:查看下面配置是否正确 Rules-customization 找到 OnB…...
Kubesphere中DevOps流水线无法部署/部署失败
摘要 总算能让devops运行以后,流水线却卡在了deploy这一步。碰到了两个比较大的问题,一个是无法使用k8sp自带的kubeconfig认证去部署;一个是部署好了以后但是没有办法解析镜像名。 版本信息 k8s:v1.21.5 k8sp:v3.3.…...
使用Nginx解决跨域问题
前言: 项目是公司的老项目,只有部署在服务器上的时候,项目才可以正常运行(接口是通的);现在需求:在现有的项目代码上进行修改,请求接口是第三方给的。接口是正常的,通过A…...
在 OpenCV 中使用深度学习进行年龄检测-附源码
文末附完整源码和模型文件下载链接 在本教程中,我们将了解使用 OpenCV 创建年龄预测器和性别分类器项目的整个过程。 年龄检测 我们的目标是创建一个程序,使用图像来预测人的性别和年龄。但预测年龄可能并不像你想象的那么简单,为什么呢?您可能会认为年龄预测是一个回归问…...
【BASH】回顾与知识点梳理(三十一)
【BASH】回顾与知识点梳理 三十一 三十一. 进程的管理31.1 给进程发送讯号kill -signal PIDlinux系统后台常驻进程killall -signal 指令名称 31.2 关于进程的执行顺序Priority 与 Nice 值nice :新执行的指令即给予新的 nice 值renice :已存在进程的 nice…...
Linux 终端命令之文件浏览(3) less
Linux 文件浏览命令 cat, more, less, head, tail,此五个文件浏览类的命令皆为外部命令。 hannHannYang:~$ which cat /usr/bin/cat hannHannYang:~$ which more /usr/bin/more hannHannYang:~$ which less /usr/bin/less hannHannYang:~$ which head /usr/bin/he…...
【精通性能优化:解锁JMH微基准测试】一基本用法
文章目录 1. 什么是JMH1.1 用JMH进行微基准测试1. JmhExample01.java2. 程序输出JmhExample01.java 2.2 JMH的基本用法2.1 Benchmark标记基准测试方法2.2 Warmup以及Measurement1. 设置全局的Warmup和Measurement(一)2. 设置全局的Warmup和Measurement&a…...
.Net程序调试时接受外部命令行参数方式
1.对项目右键,属性 2.在调试中打开常规,打开调试启动配置文件UI 3.输入需要的命令行参数...
Mariadb高可用MHA (四十二)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 概念 1.2 组成 1.3 特点 1.4 工作原理 二、构建MHA 2.1 ssh免密登录 2.2 主从复制 2.3 MHA安装 2.3.1所有节点安装perl环境 2.3..2 node 2.3.…...
AI人体骨骼关键点检测:5分钟快速部署,33个关节点一键可视化
AI人体骨骼关键点检测:5分钟快速部署,33个关节点一键可视化 1. 引言:快速体验人体姿态检测 人体骨骼关键点检测技术正在改变我们与计算机交互的方式。想象一下,你的电脑能够实时理解你的每一个动作——从简单的举手到复杂的舞蹈…...
雷小兔:让学术论文排版变得简单高效
产品概述 雷小兔是一款专门为学生和研究人员设计的学术论文辅助工具。无论你是在准备毕业论文、学位论文还是学术发表,雷小兔都能为你提供全面的支持和帮助。 论文排版方面的核心优势 1. 模板齐全,开箱即用 雷小兔内置了数十种符合国内外高校标准的论…...
2026年4月OpenClaw怎么集成?腾讯云6分钟超简单安装步骤
2026年4月OpenClaw怎么集成?腾讯云6分钟超简单安装步骤。OpenClaw(原Clawdbot)作为2026年主流的AI自动化助理平台,可通过阿里云轻量服务器实现724小时稳定运行,并快速接入钉钉,让AI在企业群聊、个人工作流中…...
GLM-4.1V-9B-Base实战教程:跨境电商A+页面图像卖点自动提炼
GLM-4.1V-9B-Base实战教程:跨境电商A页面图像卖点自动提炼 1. 为什么需要自动提炼图像卖点 跨境电商卖家每天需要处理大量商品图片,传统人工标注方式存在三个痛点: 效率低下:一个运营人员每天最多处理50-100张图片成本高昂&…...
给嵌入式开发者的英飞凌HSM实战指南:从AUTOSAR集成到密钥安全存储
英飞凌HSM深度实战:AUTOSAR集成与密钥管理全解析 在汽车电子领域,安全性能已经从"加分项"变成了"必选项"。想象一下,当一辆智能汽车以120公里时速行驶时,任何微小的安全漏洞都可能导致灾难性后果。这正是英飞…...
Omni-Vision Sanctuary 企业级部署架构设计:高可用与弹性伸缩
Omni-Vision Sanctuary 企业级部署架构设计:高可用与弹性伸缩 1. 企业级AI部署面临的挑战 当企业决定在生产环境中部署Omni-Vision Sanctuary这类AI服务时,通常会遇到几个关键挑战。首先是服务可用性问题,任何计划外停机都可能直接影响业务…...
实战应用:基于快马平台从零到一构建功能完备的openclaw101风格项目平台
今天想和大家分享一个实战经验:如何从零开始构建一个功能完备的开源项目托管平台。类似openclaw101这样的网站,其实用现代开发工具和云平台可以快速实现。下面我就把整个搭建过程拆解成几个关键环节,希望能给想做类似项目的朋友一些参考。 项…...
Qwen3.5-9B-AWQ-4bit部署指南:双卡RTX 4090-D镜像免配置快速上手
Qwen3.5-9B-AWQ-4bit部署指南:双卡RTX 4090-D镜像免配置快速上手 1. 模型概述 千问3.5-9B-AWQ-4bit是一个支持图像理解的多模态模型,能够结合上传图片与文字提示词,输出中文分析结果。这个量化版本特别适合处理以下任务: 图片主…...
Phi-4-mini-reasoning效果对比:在GSM8K与AQuA数据集上的zero-shot推理表现
Phi-4-mini-reasoning效果对比:在GSM8K与AQuA数据集上的zero-shot推理表现 1. 模型介绍 Phi-4-mini-reasoning是一款专注于推理任务的文本生成模型,特别擅长处理需要多步逻辑分析和精确结论输出的任务场景。与通用对话模型不同,它被专门设计…...
TextInput Effects部署与测试:确保跨平台兼容性的完整流程
TextInput Effects部署与测试:确保跨平台兼容性的完整流程 【免费下载链接】react-native-textinput-effects Text inputs with custom label and icon animations for iOS and android. Built with react native and inspired by Codrops. 项目地址: https://git…...
