MySQL基本組成
SQL執(zhí)行流程
Server 層主要包括連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器,包含了MySQL主要的很多核心功能,以及所有的內(nèi)置函數(shù)、存儲(chǔ)過程、觸發(fā)器、視圖等,其實(shí)就是所有跨存儲(chǔ)引擎的功能都是在這一層實(shí)現(xiàn)的 存儲(chǔ)引擎層,主要負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和讀取,是以插件的形式存在的 ,支持如 InnoDB 、MyISAM 、Memory 等多個(gè)存儲(chǔ)引擎,現(xiàn)在默認(rèn)為 InnoDB
查詢緩存當(dāng)一個(gè)SQL執(zhí)行時(shí)首先會(huì)進(jìn)入查詢緩存 查看之前是否執(zhí)行過該語句,如果執(zhí)行過則會(huì)以key-value的形式保存在緩存中,key是查詢語句,value是查詢結(jié)果 如果緩存命中則直接返回結(jié)果,如果查詢語句不在緩存中繼續(xù)后面的流程 大多數(shù)情況下我們不推薦使用查詢緩存,因?yàn)榫彺媸Х浅nl繁,只要一個(gè)更新,那么這個(gè)表上所有的緩存都會(huì)失效,吐過數(shù)據(jù)的更新比較多,那么緩沖命中的效率很低,不斷的在失效 在MySQL中提供了參數(shù) query_cache_type 參數(shù)來設(shè)置,默認(rèn)是 DEMAND ,表示對默認(rèn)的SQL都不使用查詢緩存,如果要對特的語句進(jìn)行緩存查詢,則可以使用 SQL_CACHE 來顯示的指定,如 select SQL_CACHE * from T where ID=1; 在MySQL8.0 開始,查詢緩存整個(gè)功能模塊已經(jīng)刪除掉不再擁有
分析器優(yōu)化器對我們的SQL進(jìn)行優(yōu)化,得到更高的執(zhí)行計(jì)劃 如有多個(gè)索引時(shí)確定要用那個(gè)索引 當(dāng)有多變聯(lián)查join 時(shí),查詢表的順序 對查詢條件和語句的優(yōu)化
執(zhí)行器Buffer Pool[server] innodb_buffer_pool_size = 2147483648
數(shù)據(jù)頁MySQL中對數(shù)據(jù)進(jìn)行抽象,按照數(shù)據(jù)頁的形式來存放到文件,當(dāng)查詢時(shí),首先定位到要查詢數(shù)據(jù)所在的數(shù)據(jù)頁,之后將整個(gè)數(shù)據(jù)頁加載到Buffer Pool 中, 數(shù)據(jù)頁默認(rèn)的大小是 16KB , 也就是一頁數(shù)據(jù)包含16KB 的數(shù)據(jù) 在BufferPool 中的數(shù)據(jù)頁一般我們叫緩存頁,默認(rèn)情況下緩存頁與磁盤上的數(shù)據(jù)頁大小是對應(yīng)的 對于每個(gè)緩存頁都有一個(gè)描述信息 描述信息包括:數(shù)據(jù)頁的所屬表空間,數(shù)據(jù)頁的標(biāo)號(hào),這個(gè)緩存頁在Buffer Pool 中的內(nèi)存地址以及其他一些信息 在 Buffer Pool 中,所有的描述信息都在最前面,然后各個(gè)緩存頁放在后面

表空間平時(shí)我們創(chuàng)建張表時(shí)都會(huì)在磁盤上對應(yīng)著一個(gè)表名.ibd , 這樣的磁盤數(shù)據(jù)文件,這就是表空間的概念和物理體現(xiàn) 對于一些系統(tǒng)表空間可能存在著對應(yīng)多個(gè)磁盤文件,我們自己創(chuàng)建的表對應(yīng)的表空間一般都是對應(yīng)一個(gè) 表名.ibd 的數(shù)據(jù)文件
數(shù)據(jù)區(qū)在表空間中有太多的數(shù)據(jù)頁不好管理,這是引入了數(shù)據(jù)區(qū)的概念,英文:extent 一個(gè)數(shù)據(jù)區(qū)中有連續(xù)的64 個(gè)數(shù)據(jù)頁,每個(gè)數(shù)據(jù)頁16kb , 所以每個(gè)數(shù)據(jù)區(qū)大小是1MB 同時(shí)265 個(gè)數(shù)據(jù)區(qū)被劃分為一組 在表空間中第一組數(shù)據(jù)區(qū)的第一個(gè)數(shù)據(jù)區(qū)的前三個(gè)數(shù)據(jù)頁是固定的,存放一些特殊的描述性的信息 FSP_HDR 數(shù)據(jù)頁: 存放一些表空間和這一組數(shù)據(jù)區(qū)的屬性
IBUF——BITMAP 數(shù)據(jù)頁:存放這組數(shù)據(jù)頁所有的 insert buffer 的一些信息
INODE 數(shù)據(jù)頁:存放一些特殊信息
表空間中其他各組數(shù)據(jù)區(qū)的第一個(gè)數(shù)據(jù)區(qū)的頭兩個(gè)數(shù)據(jù)頁都是存放特殊信息的
本文由AnonyStar 發(fā)布,可轉(zhuǎn)載但需聲明原文出處。
|