<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文將解讀MySQL資料庫查詢優化器(CBO)的工作原理。簡單介紹了MySQL Server的組成,MySQL優化器選擇索引額原理以及SQL成本分析,最後通過 select 查詢總結整個查詢過程。
下面我們來看這張表,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+樹只是用於儲存的資料結構。
如何使用它取決於資料庫的優化器。優化器確定特定索引的選擇,即執行計劃。優化器的選擇基於成本,成本越低,首選指數越高。
MySQL資料庫由Server(伺服器)層和Engine(引擎)層組成。
Serve層有SQL分析器、SQL優化器和SQL執行器,負責SQL語句的具體執行過程。
Engine層負責儲存特定資料,例如最常用的InnoDB儲存引擎,以及用於在記憶體中儲存臨時結果集的TempTable引擎。
SQL優化器將分析所有可能的執行計劃,並選擇成本最低的執行。這個優化器被稱為CBO(基於成本的優化器)。
在 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優化器的工作原理,我們執行下面這行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" ] } } }
如何提高MySQL的查詢效能?首先,您需要了解查詢優化器進行SQL處理的整個過程。SELECT SQL 的執行過程為例,如下圖所示:
使用者端向伺服器傳送SELECT查詢;伺服器首先檢查查詢快取。如果快取被命中,儲存在快取中的結果將立即返回。否則,進入下一階段;
伺服器執行SQL解析、預處理,查詢優化器生成相應的執行計劃;MySQL根據優化器生成的執行計劃呼叫儲存引擎的API執行查詢;結果將返回到使用者端,並同時放入查詢快取。
本文解讀了MySQL資料庫查詢優化器(CBO)的工作原理。簡單介紹了MySQL Server的組成,MySQL優化器選擇索引額原理以及SQL成本分析,最後通過 select 查詢總結整個查詢過程。
到此這篇關於深入瞭解MySQL中索引優化器的工作原理的文章就介紹到這了,更多相關MySQL索引優化器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45