中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-11-09 15:52:15 來源:億速云 閱讀:139 作者:iii 欄目:MySQL數據庫

這篇“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(基于成本的優化器)。

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

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 的執行過程為例,如下圖所示:

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

客戶端向服務器發送SELECT查詢;服務器首先檢查查詢緩存。如果緩存被命中,存儲在緩存中的結果將立即返回。否則,進入下一階段;

服務器執行SQL解析、預處理,查詢優化器生成相應的執行計劃;MySQL根據優化器生成的執行計劃調用存儲引擎的API執行查詢;結果將返回到客戶端,并同時放入查詢緩存。

以上就是關于“MySQL索引優化器工作原理是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

拜城县| 邮箱| 上杭县| 乌鲁木齐县| 定远县| 乐昌市| 营山县| 寻乌县| 明溪县| 兰西县| 贵州省| 绥江县| 临武县| 灵台县| 石城县| 彩票| 封开县| 页游| 光泽县| 泰安市| 凤庆县| 思茅市| 独山县| 玉龙| 元江| 融水| 绥中县| 灵璧县| 庆安县| 白山市| 永康市| 大宁县| 顺平县| 兴义市| 商水县| 滨州市| 平顺县| 江达县| 江西省| 宜兰县| 云霄县|