八. MySQL 成本计算与执行优化器优化步骤

目录

  • 一. MySQL 的成本计算
  • 二. 执行优化相关
    • 配置开启"优化追踪命令"
    • MySQL 执行优化器的优化步骤
      • 1. condition_processing 处理搜索条件优化阶段
      • 2. rows_estimation 分析业务SQL优化阶段

一. MySQL 的成本计算

  1. mysql在查询数据时考虑比较重要的两个成本: io成本与cup成本
  1. 将数据由磁盘加载到内存的过程称为io成本,读取一页的数据到内存io成本为1.0
  2. 数据加载到内存后,mysql在内存对数据的读取,解析,计算过滤,排序等相关处理称为cup成本,当通过内存检测一次数据满足执行sql的条件cpu成本为0.2
  1. 全表扫描时的执行过程: 实际就是将聚簇索引加载到内存(也就是实际数据),然后检查是否满足条件,然后将满足过滤条件的数据加入到结果集, 那么全表扫描时mysql所需要的io成本, cup成本怎么计算
  1. io成本: 聚簇索引占用页数1.0+1.1(微调数), cpu成本: 数据条数0.2+1.0(微调数)
    2.mysql中提供了专门的命令查看表的统计信息: 查看所有表"show table status;" 查看指定表"show table status like ‘表名’ ", 返回数据中rows表示数据行数(估计值), Data_length表示当前表数据占用的字节数, 聚簇索引一页16k, Data_length/16/1024获取到当前数据占用的页数
  1. 通过explain 查看执行成本

“explain format=json 实际执行的sql语句” 该方式比普通explain会多返回一些数据,其中query_cost的值就是执行当前sql所需要io成本+cpu成本,继续寻找会发现一个const_info内部保存了详细的执行成本
在这里插入图片描述

二. 执行优化相关

配置开启"优化追踪命令"

  1. mysql在5.6版本后提供了"优化追踪命令",可以更直观的看到mysql优化后执行的sql, 但是需要配置开启
  1. "show variables like ‘optimizer_trace’ " : 查看mysql是否开启优化追踪
  2. "set optimizer_trace=“enabled=on” ": 开启优化追踪
  3. 执行实际的业务sql, 当业务sql执行完毕后,mysql会将该sql的分析结果存储到一张系统表中,其中就包括优化步骤
  4. “select * from information_schema.optimizer_trace” 查看mysql对业务sql执行计划分析的全过程,返回数据解释:

QUERY: 实际执行的sql
TRACE: 整个执行计划优化分析生成的json文本, 在TRACE中包含执行sql时的三个阶段: “join_preparation 准备阶段”, “join_optimization 优化阶段”, “join_execution 执行阶段”
其中重点关注TRACE下的"join_optimization 优化阶段"

MySQL 执行优化器的优化步骤

  1. mysql在执行前会通过执行计划计算执行成本,选择一个性能最优的路径执行,这也就是执行优化器优化的步骤
  1. 根据搜索条件,找出所有可能使用的索引
  2. 计算全表扫描的执行成本
  3. 计算通过不同索引执行的执行成本
  4. 对比各种执行方案,选择最优执行路径.
  1. 通过TRACE下的"join_optimization 优化阶段",了解到优化阶段通常经过一些几个步骤
  1. 第一步: condition_processing: 处理搜索条件, 可以简单理解为处理where后的一系列条件
  2. 第二步: substitute_generated_columns: 替换虚拟生成列,注意该步骤是5.7以后出现的新特性
  3. 第三步: table_dependencies: 分析表的依赖信息
  4. 第四步:重点 rows_estimation: 分析业务sql的不同执行路径,执行成本, 选择最优路径

1. condition_processing 处理搜索条件优化阶段

  1. condition_processing: 处理搜索条件, 下的详细步骤解释: (condition_processing下存在"original_condition"该key中记录了执行的业务sql,where后的原始条件, 对于原始条件mysql会进行一定的优化,通常情况下可能出现以下几个步骤)
  1. equality_propagation等值传递转换: 例如"where a=1+5" 经过该步骤后会优化为"where a=6"
  2. constant_propagation常量传递转换:
  3. trivial_condition_removal去除没用的条件: 例如 “where 1=1” 永远为true, 经过mysql分析后可能就把这个条件给去掉了
    在这里插入图片描述

2. rows_estimation 分析业务SQL优化阶段

  1. rows_estimation: 分析业务sql的不同执行路径,执行成本,选择最优路径
  1. 第一步: table_scan分析全表扫描,记录如果业务sql通过全部扫描方式查询数据时,需要扫描的行数rows, 消耗的总成本cost
  2. 第二步: potential_range_indexes分析sql能否命中索引,获取到能够命中的索引,内部又细分为主键索引, 普通索引,联合索引,如果命中索引index下存储的是命中的索引名,usable返回true,
  3. 第三步: range_alternatives 上一步骤拿到了能够命中的索引,当前步骤针对每个能够命中的索引,分析业务sql如果使用该索引获取数据时需要扫描的行数,消耗的总成本,能否使用index_dive索引精确模式扫描数据,mrr访问磁盘时能否顺序访问(不使用随机访问),其中"chosen"中保存了实际有没有实际该索引,false表示没有使用,"cause"中保存了没有使用的原因,如果存储了"cost"表示成本原因所以没采用
    在这里插入图片描述
  4. 第四步: analyzing_roworder_intersect 分析是否使用了索引合并,usable为false表示没有,cause中存储了没有使用的原因
  5. 第五步: chosen_range_access_summary针对以上索引分析进行统计汇总: 上一步骤中对所有能够命中的索引分析了一遍,当前步骤会选择一个最优的,"index"中存储了应该使用哪个索引, "type"扫描类型,"rows"影响的函数, "ranges"扫描范围,"rows_for_plan"扫描行数,"cost_for_plan"消耗总成本,"chosen"是否选择该索引,true选择
    在这里插入图片描述
  6. 第六步: considered_execution_plans 选择执行计划,如果是多表连接查询,该步骤会对多表连接的组合成本进行分析计算
    在这里插入图片描述
  7. 第七步: attaching_conditions_to_tables 尝试给执行的业务sql添加其它执行条件,判断是否能使用ICP,也就是索引下推
    在这里插入图片描述
  8. 第八步: refine_plan 最终完善优化
    在这里插入图片描述
  1. 以上的分析可以理解为都只针对单表的
  2. 连表查询的成本计算是单次查询驱动表+多次查询被驱动表成本的和

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/4780.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

下一代的新操作系统就是ChatGPT!

什么是CHatgpt? ChatGPT是人工智能研究实验室OpenAI在2022年11月30日推出的聊天机器人模型,它使用Transformer神经网络架构,训练数据来自包括维基百科,以及真实对话在内的庞大语料库。2023年1月30日消息称,中国搜索巨…

最值得入手的五款骨传导耳机,几款高畅销的骨传导耳机

骨传导耳机是一种声音传导方式,主要通过颅骨、骨骼把声波传递到内耳,属于非入耳式的佩戴方式。相比传统入耳式耳机,骨传导耳机不会堵塞耳道,使用时可以开放双耳,不影响与他人的正常交流。骨传导耳机不会对耳朵产生任何…

我的第一台手提 | 关于你的第一台手提征文活动

我的第一台手提 | 关于你的第一台手提征文活动前言一、手提配置二、手提使用评价三、未来工作的设备前言 说起我的第一台电脑🖥️,还是挺有感触的。我记得它是一台组装的台式电脑,时间大概是2002年,那是电脑对于普通家庭来说其实…

电电电电电电电电要来了!

近年来,随着电力行业的不断发展,电网规模逐渐扩大,电力需求量日益增长。同时,随着人工智能、物联网、5G等技术的快速发展,边缘计算技术逐渐成为电力行业解决方案的重要组成部分。电力行业边缘计算应运而生,…

Ajax 入门

前端技术:在浏览器中执行的程序都是前端技术。如 html、css、js 等 后端技术:在服务器中执行的长须,使用 Java 等语言开发的后端程序。servlet,jsp,jdbc,mysql,tomacat 等 全局刷新 使用表单…

分享:从ChatGPT给到的数据库故障案例,看开发协同未来趋势

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/ 本文来自OceanBase社区分享,仅限交流探讨。原作者陈小伟。 我是陈小伟, 2019 年加入 OceanBase,目前负责 OceanBase 开发者中心的研发。 OceanBase ODC 这几年从…

200.Spark(七):SparkSQL项目实战

一、启动环境 需要启动mysql,hadoop,hive,spark。并且能让spark连接上hive(上一章有讲) #启动mysql,并登录,密码123456 sudo systemctl start mysqld mysql -uroot -p#启动hive cd /opt/module/ myhadoop.sh start#查看启动情况 jpsall#启动hive cd /opt/module/hive/…

为了开放互联,明道云做了十件事

本文来自明道云资深研发经理孙伟,在明道云2022年秋季伙伴大会活动演讲,经校对编辑后整理为演讲精华。 一、开放没有选择 很多客户选择我们的一个重要原因,是明道云所能提供的产品开放能力。开放其实是没有选择的,坦白来讲&#…

SM3哈希算法的FPGA实现 I

SM3哈希算法的FPGA实现 I SM3哈希算法的FPGA实现 I一、什么是SM3哈希算法?二、SM3哈希算法的具体内容1、填充2、迭代与压缩3、计算拼凑值三、参考文档语言 :verilog 仿真工具: Modelsim EDA工具:quartus II 一、什么是SM3哈希算法…

【Unity 手写PBR】Build-in管线:实现间接光部分

写在前面 直接光昨天已经实现了:【Unity Shader】Build-in管线实现PBR:直接光部分,今天趁热打铁,补完剩下的间接光计算。 1 补一个法线纹理 突然法线直接光部分忽略了法线纹理应用的部分,这当然也是不可或缺的部分&a…

基于springboot实现家政服务管理平台【源码+论文】

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 摘要 随着家政服务行…

《Netty》从零开始学netty源码(十七)之AbstractUnsafe

NioServerSocketChannel的父类AbstractChannel调用newUnsafe方法创建AbstractNioUnsafe,newUnsafe直接调用NioMessageUnsafe的无参构造函数创建实例,该构造函数是java默认的构造函数,过程如下: NioMessageUnsafe的结构图如下&am…

2023年湖北省建筑八大员(建设厅七大员)报考流程和拿证流程来咯!

2023年湖北省建筑八大员(建设厅七大员)报考已经开始,想要快速拿证的联系甘建二 湖北省建筑八大员报名和拿证简单吗?怎么报考?甘建二告诉你 1、湖北省建筑八大员建设厅七大员考试岗位:施工员、质量员、材料员…

推荐一款自动生成财务报表分析的软件

财务报表能够清晰的反映一个企业的经营状况,通过三大财务报表的资产负债表、利润表、现金流量表,能够清晰的揭示企业经营中存在的问题,也是税务局要求企业报税的必备财务报表。但是,会计手工编制财务报表,费时费力&…

中介变量、调节变量与协变量

在平时看论文过程中偶会接触到这几个概念,然而都没想过弄明白,每次总觉得只要看明白个大概反正自己又不用这种方法…作为科研人,还是应该保持谦逊,保持学习 一、中介变量 1.概念 中介变量(mediator)是自…

人事文件签署单调、重复、繁重?君子签电子合同提升HR工作质效

人事文件作为企业管理中最常见、最频繁也是最常用的签署文件,使用安全合规、高效便捷的电子化签署方式,可以帮助HR从大量单调、重复、繁重的人事管理事务中解放出来,优化人事管理流程,提升管理效率。 君子签围绕企业员工“招聘、入…

Ajax:服务器的基本概念与初识Ajax

Ajax:服务器的基本概念与初识Ajax Date: January 19, 2023 目标 能够知道和服务器相关的基本概念 能够知道客户端和服务器通信的过程 能够知道数据也是一种资源 能够说出什么是Ajax以及应用场景 能够使用jQuery中的Ajax函数请求数据 能够知道接口和接口文档的…

怎么将pdf压缩?pdf文件如何压缩?

pdf文件如果过大的话,容易导致传送失败,最简单的办法就是通过pdf在线压缩的方法去将pdf压缩(https://www.yasuotu.com/pdfyasuo),但是一般的压缩软件会损害dpf文件质量,所以有没有pdf无损压缩的方法呢&…

即时零售:不可逆的进化

“人们经常问我,这个世界还是平的吗?我经常跟他们说,亲爱的,它真的是平的,比以前更平了。”2021年3月,《世界是平的》作者托马斯弗里德曼在演讲时说。如他所说,尽管逆全球化趋势加剧&#xff0c…

【WEB前端进阶之路】 HTML 全路线学习知识点梳理(下)

前言 本文是HTML零基础小白学习系列的第三篇文章,点此阅读 上一篇文章 文章目录前言十五.HTML布局1.使用div元素添加网页布局2.使用table元素添加网页布局十六.HTML表单和输入1.文本域2.密码字段3.单选按钮4.复选框5.提交按钮十七.HTML框架1.iframe语法2.iframe设置…
最新文章