在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

MySQL索引优化器工作原理是什么

134次阅读
没有评论

共计 2786 个字符,预计需要花费 7 分钟才能阅读完成。

这篇“MySQL 索引优化器工作原理是什么”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“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 的成本。

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 索引优化器工作原理是什么”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计2786字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国内精品人妻无码久久久影院导航 | 亚洲国产成人手机在线观看 | 妺妺窝人体色www看美女 | 九九热中文字幕 | 久久久久久久久免费影院 | 国产免费色视频 | 忘穿内裤坐公交被挺进小说 | 日韩视频中文字幕精品偷拍 | 亚洲精品国产av成拍色拍 | 色欲色香天天天综合网www | 亚洲免费在线观看 | 免费一级a毛片免费观看欧美大片 | 亚洲国产午夜 | 青久在线 | 中文字幕久久精品 | 日韩精品欧美国产精品忘忧草 | 国产亚洲婷婷香蕉久久精品 | 国产午夜亚洲精品久久www | 一级做人免费观看c欧美网站 | 亚洲欧洲国产成人精品 | 久久是精品 | 亚洲 欧美 动漫 少妇 自拍 | 玩弄丰满少妇xxxxx性多毛 | 日韩欧| 亚洲人成网77777色在线播放 | 国产精品无码专区av在线播放 | 又粗又大又黄又爽的免费视频 | 韩国一区在线 | 欲色影视天天一区二区三区色香欲 | 99久久国产综合精品女同图片 | 一线毛片 | 国产精品免费网站 | 午夜毛片视频 | 日韩欧美 a级 | 国产欧美精品专区一区二区 | 国产精品亚洲综合色区韩国 | 不卡视频一区二区三区 | 男人都懂www深夜免费网站 | 99热这里只有精品国产免费 | 麻豆人妻无码性色av专区 | 男女交性粗大视频播放 |