深入理解MySQL索引优化器工作原理


本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引优化器工作原理的相关内容,其中包括了mysql server的组成,mysql优化器选择索引额原理以及sql成本分析,最后通过 select 查询总结整个查询过程,下面一起来看一下,希望对大家有帮助。

深入理解MySQL索引优化器工作原理

推荐学习:mysql视频教程

一、MySQL 优化器是如何选择索引的

下面我们来看这张表,SUB_ODR_ID字段创建了相关的 2 个索引,根据我们前面所学我们建立一个PRIMARY KEY (ID)自增主键索引,(LOG_ID, SUB_ODR_ID)设置为联合索引、唯一索引,两个时间CREATE_TIME、UPDATE_TIME分别设置两个索引。

CREATE TABLE `***`  (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `LOG_ID` varchar(32) NOT NULL COMMENT '交易流水号',
  `ODR_ID` varchar(32) NOT NULL COMMENT '父单号',
  `SUB_ODR_ID` varchar(32) NOT NULL COMMENT '子单号',
  `CREATE_TIME` datetime(0) NOT NULL COMMENT '创建时间',
  `CREATE_BY` varchar(32) NOT NULL COMMENT ' 创建人',
  `UPDATE_TIME` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  `UPDATE_BY` varchar(32) NOT NULL COMMENT '更新人',
  PRIMARY KEY (`ID`) USING BTREE,
  UNIQUE INDEX `UNQ_LOG_SUBODR_ID`(`LOG_ID`, `SUB_ODR_ID`) USING BTREE,
  INDEX `IDX_ODR_ID`(`ODR_ID`) USING BTREE,
  INDEX `IDX_SUB_ID`(`SUB_ODR_ID`) USING BTREE,
  INDEX `IDX_CREATE_TIME`(`CREATE_TIME`) USING BTREE,
  INDEX `IDX_UPDATE_TIME`(`UPDATE_TIME`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 SET = utf8 COLLATE = utf8_general_ci COMMENT = '分摊业务明细表' ROW_FORMAT = Dynamic;

在查询字段 SUB_ODR_ID 中,理论上可以使用三个相关的索引:UNQ_LOG_SUBODR_ID、IDX_SUB_ID,MySQL优化器如何从这三个索引中进行选择?

在关系数据库中,B+树只是用于存储的数据结构。

如何使用它取决于数据库的优化器。优化器确定特定索引的选择,即执行计划。优化器的选择基于成本,成本越低,首选指数越高。

1、MySQL数据库组成

MySQL数据库由Server(服务器)层和Engine(引擎)层组成。

Serve层有SQL分析器、SQL优化器和SQL执行器,负责SQL语句的具体执行过程。

Engine层负责存储特定数据,例如最常用的InnoDB存储引擎,以及用于在内存中存储临时结果集的TempTable引擎。

SQL优化器将分析所有可能的执行计划,并选择成本最低的执行。这个优化器被称为CBO(基于成本的优化器)。

2、MySQL数据库成本计算

在 MySQL中,一条 SQL 的计算成本计算,很好理解,就是访问数据库(数据库页、磁盘)+处理数据。

CPU成本,表示计算成本,例如索引键值的比较、记录值的比较和结果集的排序。这些操作都在服务器层完成

IO成本,表示引擎级IO的成本,MySQL 8.0可以通过区分表的数据是否在内存中来分别计算读取内存IO和磁盘IO的成本。

海纳企业网站管理系统2.0 Ultimate 海纳企业网站管理系统2.0 Ultimate

海纳企业网站管理系统(HituxCMS)是海纳网络工作室(Hitux.com)专业为企业建站而开发的一款网站程序。该系统采用最简单易用的asp+access进行搭建,拥有完善的网站前后台,并特别根据企业网站的特点开发出独具特色的栏目和功能。HituxCMS是企业建站的绝佳选择! 系统三大特色: 1、全静态:全站生成.html静态页面。降低服务器压力,增强百度收录。 2、高优化:特别针对搜索引擎进行

海纳企业网站管理系统2.0 Ultimate 0 查看详情 海纳企业网站管理系统2.0 Ultimate
Cost  = Server Cost + Engine Cost  = CPU Cost + IO Cost

MySQL优化器认为,如果一段SQL需要创建一个基于磁盘的临时表,那么此时的成本是最大的,是基于内存的临时表的20倍。比较索引键值和记录的成本很低,但如果要比较的记录很多,成本就会非常大。

MySQL 优化器认为,从磁盘读取的开销是内存开销的 4 倍(成本不是一成不变的会根据硬件变化)。

二、MySQL查询成本

查看各成本的值,MySQL优化器的工作原理,我们执行下面这行SQL语句,分析执行过程,MySQL 索引选择是基于 SQL 执行成本

EXPLAIN FORMAT=json 
select * from test.fork_business_detail f where f.sub_odr_id = ''

read_cost表示从InnoDB存储引擎读取的成本;

eval_cost表示服务器层的CPU成本;

prefix_cost表示SQL的总成本;

data_read_per_join 表示读取记录中的字节总数。

{
	"query_block": {
		"cost_info": {
			"query_cost": "1.20"
		},
		"table": {
			"access_type": "ref",
			"possible_keys": [
				"IDX_SUB_ID"
			],
			"key": "IDX_SUB_ID",
			"used_key_parts": [
				"SUB_ODR_ID"
			],
			"key_length": "98",
			"ref": [
				"const"
			],
			"cost_info": {
				"read_cost": "1.00",
				"eval_cost": "0.20",
				"prefix_cost": "1.20",
				"data_read_per_join": "1K"
			},
			"used_columns": [
				"ID",
				"LOG_ID",
				"ODR_ID",
				"SUB_ODR_ID",
				"CREATE_TIME",
				"CREATE_BY",
				"UPDATE_TIME",
				"UPDATE_BY"
			]
		}
	}
}

三、SELECT 执行过程

如何提高MySQL的查询性能?首先,您需要了解查询优化器进行SQL处理的整个过程。SELECT SQL 的执行过程为例,如下图所示: 

客户端向服务器发送SELECT查询;服务器首先检查查询缓存。如果缓存被命中,存储在缓存中的结果将立即返回。否则,进入下一阶段;

服务器执行SQL解析、预处理,查询优化器生成相应的执行计划;MySQL根据优化器生成的执行计划调用存储引擎的API执行查询;结果将返回到客户端,并同时放入查询缓存。

推荐学习:mysql视频教程

以上就是深入理解MySQL索引优化器工作原理的详细内容,更多请关注其它相关文章!


# 企业建站  # 岳麓区关键词seo排名优化  # seo 未来  # 南昌农产品网站建设方案  # 大理数字人营销推广  # 网站站在优化  # 如何提高seo和sem  # 大冶网站建设资质  # 主流的营销推广渠道包括  # 合肥网站优化推广有用吗  # 网站建设什么工作好干点  # MySQL  # 如何设置  # 客户端  # 主键  # 键值  # 海纳  # 工作原理  # 企业网站  # 管理系统  # 镜像  # 数据库 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: composer 提示 "requires ext-soap" 缺少 SOAP 扩展怎么办?  word页码灰色不能用如何解决  电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】  j*a中ArrayBlockingQueue的使用  PHP与SQL实践:高效实现数据复制与特定列值修改  Highcharts雷达图径向轴数值标签实现教程  解决CSS background 属性中 cover 关键字的常见误用  电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  MongoDB聚合管道:高效统计列表中各项的文档数量  Python中安全地将环境变量转换为整数的类型注解指南  键盘测试软件哪个好_键盘故障检测工具推荐  《友玩*》创建群聊方法  教育查询官方网站入口 教育个人档案查询免费官网  创客贴登录页面入口 创客贴网页版最新网址链接  如何在 WordPress 前端实现内容提交:古腾堡编辑器的替代方案与实践  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  为什么XML解析器对大小写敏感? 理解XML规范中的大小写规则与最佳实践  免费占卜在线神算_免费占卜手机神算  手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入  Teambition网盘如何共享文件  作业帮网页版不用下载入口 在线问老师快速答疑  《火影忍者:木叶高手》快速升级攻略  Flexbox布局中Stencil组件宽度不显示问题解析与:host尺寸控制  byrutor直接访问入口 byrutor官方游戏库  使用document.execCommand实现Web文本编辑器加粗/取消加粗  如何在CSS中设置背景图像:一个全面指南  手机远程连接电脑方法  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  电子白板帮助菜单使用指南  使用jQuery精确检测除指定元素外任意位置的点击事件  海棠阅读登录教程_详细讲解海棠登录操作  冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤  c++如何掌握指针的核心用法_c++指针入门到精通指南  抖音团长模式怎么做?团长模式是什么意思?  b站如何剪辑视频_b站必剪app使用教程  ao3入口镜像地址 ao3镜像入口可靠跳转  C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  纯CSS实现自适应宽度与响应式布局的水平按钮组  《波斯王子:失落的王冠》剑术大师打法攻略  网页版网易云音乐入口_网易云音乐在线官网登录  Google Drive API 认证:服务账户与OAuth 2.0的选择与实践  如何在Podman容器中运行Composer_Docker替代品Podman的PHP与Composer容器化实践  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  Excel宏怎么删除_Excel中删除宏的详细操作流程  qq音乐官方网站入口_qq音乐在线听歌网页版链接  处理含命名空间的XML文件 Power Query中的高级技巧  全球各国上班时间表外贸邮件时间 

 2022-11-09

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.