以select * from students where age20為例,mysql內(nèi)部運行機(jī)制是這樣的:

在網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)過程中,需要針對客戶的行業(yè)特點、產(chǎn)品特性、目標(biāo)受眾和市場情況進(jìn)行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計方向。成都創(chuàng)新互聯(lián)公司還需要根據(jù)客戶的需求進(jìn)行功能模塊的開發(fā)和設(shè)計,包括內(nèi)容管理、前臺展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計和安全保護(hù)等功能。
第一步:讀取from后面的表(數(shù)據(jù)源),將整個表從硬盤存入到內(nèi)存中,得到一個臨時表,因為還沒有附上條件,此時查詢結(jié)果集還沒有得出。
第二步:讀取where后面的條件。逐行掃描內(nèi)存臨時表中所有"行",符合where條件的"行"才能繼續(xù)呆在內(nèi)存中.此時是對臨時表執(zhí)行過濾,查詢結(jié)果集還沒有得出(就像在跑步,還拿不到跑步成績)
第三步:讀取select后面內(nèi)容。臨時表+執(zhí)行完where條件后,最終得到一個結(jié)果集在內(nèi)存中.select后面的內(nèi)容作用于結(jié)果集,決定到底哪些列可以輸出到數(shù)據(jù)庫客戶端(讓人看到)
這個機(jī)制如果了解,對于sql查詢語句的拍錯是非常有利的。具體的可以去黑馬程序員搜一下免費的視頻,干貨比較全。
首先,建立索引的目的,就是為了提高數(shù)據(jù)庫的查詢效率,然而,這肯定得付出一些代價,一個是需要索引表本身需要占部分空間,然后就是寫入操作的花銷要比沒索引的時候多了,因為要維護(hù)索引的數(shù)據(jù)結(jié)構(gòu)。一般來說索引的實現(xiàn)是b樹和b+樹,就是比如我在一張表的某列上建立一個索引,數(shù)據(jù)庫系統(tǒng)就自動把這一列排序然后創(chuàng)建一個b+樹,以后每次查找就順著b+樹查找,而不用從第一行數(shù)據(jù)一直找到目標(biāo)行,這會大大縮小查找時間。
mysql底層架構(gòu)分為:
1、client(客戶端)
2、server(服務(wù)端)
client: 主要有各種plugin、jdbc等
server: 包含了連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器、存儲引擎
連接器 的主要作用是與 客戶端 建立聯(lián)系,管理客戶端的連接、會話、權(quán)限驗證等。
查詢緩存 的作用是,在sql通過連接器之后到達(dá)服務(wù)端之后,如果sql是sel開頭的語句,那么先在 查詢緩存 中獲取命中結(jié)果,如果有命中結(jié)果則直接返回結(jié)果。沒有結(jié)果那么sql會通往 分析器 。
分析器 拿到sql后,會對sql進(jìn)行詞法、語法分析,同時創(chuàng)建sql Id,如果sql有錯誤,那么將會終止sql行為,將異常返回客戶端。
優(yōu)化器 的作用主要是對通過 分析器 的sql進(jìn)行優(yōu)化,比如進(jìn)行 索引選擇 、 重寫查詢 等,同時會創(chuàng)建 sql執(zhí)行計劃 ,可以通過 explain 指令進(jìn)行查看。
執(zhí)行器 拿到了經(jīng)過優(yōu)化器的sql,將會操作 存儲引擎 ,通過調(diào)用 存儲引擎 提供的讀寫接口,得到返回結(jié)果。
存儲引擎 是sql的最終執(zhí)行者,它對外提供了讀寫接口,本身主要作用為執(zhí)行sql、存儲數(shù)據(jù)、獲取數(shù)據(jù)等, 存儲引擎 的設(shè)計是插件形式實現(xiàn)的,常見了有 InnoDB 、 MyISAM 等。
未完待續(xù)......
二叉樹:當(dāng)不平衡時,單邊增長,可能退化為線性
紅黑樹:數(shù)據(jù)量大時,深度不可控
AVL樹:相比較與紅黑樹,嚴(yán)格平衡,但是增刪情況下,通過旋轉(zhuǎn)再平衡的開銷過大,適合查找場景多的應(yīng)用
Hash: 不支持范圍查找
平衡的多路查找樹,一個結(jié)點存放多個元素。
與紅黑樹相比,在相同的的節(jié)點的情況下,一顆B/B+樹的高度遠(yuǎn)遠(yuǎn)小于紅黑樹的高度(在下面B/B+樹的性能分析中會提到)。B/B+樹上操作的時間通常由存取磁盤的時間和CPU計算時間這兩部分構(gòu)成,而CPU的速度非常快,所以B樹的操作效率取決于訪問磁盤的次數(shù),關(guān)鍵字總數(shù)相同的情況下B樹的高度越小,磁盤I/O所花的時間越少。
m階:節(jié)點中,子節(jié)點數(shù)的最大值(子節(jié)點數(shù),不是結(jié)點存放元素)
1. 樹中每個結(jié)點最多m個子樹(最多m-1個關(guān)鍵字,兩個子樹夾一個關(guān)鍵字)
2. 根節(jié)點最少有1個關(guān)鍵字
3. 非根結(jié)點最少m/2個子樹(m/2 - 1個關(guān)鍵字)
4. 每個關(guān)鍵字排序
5. 所有的葉子結(jié)點位于同一層
6. 每個結(jié)點都存有索引和數(shù)據(jù)
(1)簡介
B+樹是應(yīng)文件系統(tǒng)所需而產(chǎn)生的一種B樹的變形樹(文件的目錄一級一級索引,只有最底層的葉子節(jié)點(文件)保存數(shù)據(jù))非葉子節(jié)點只保存索引,不保存實際的數(shù)據(jù),數(shù)據(jù)都保存在葉子節(jié)點中。所有的非葉子節(jié)點都可以看成索引部分!
(2)B+樹的性質(zhì)(下面提到的都是和B樹不相同的性質(zhì))
1. b+樹有兩種類型的結(jié)點:
1.1 內(nèi)部結(jié)點(索引結(jié)點,非葉結(jié)點): 只存索引,不存數(shù)據(jù)
1.2 葉子結(jié)點 (存數(shù)據(jù))
2. 內(nèi)部結(jié)點 和 葉子結(jié)點的 key遞增排序
3. 每個葉結(jié)點存有相鄰葉結(jié)點的指針
4. 父結(jié)點存有右孩子第一個元素索引
1.磁盤io代價低:b+樹的非葉結(jié)點只存儲索引,不存儲數(shù)據(jù),單一結(jié)點能存放的索引數(shù)更多,樹更矮胖
2. b+樹查詢效率穩(wěn)定:所有查詢必須到葉節(jié)點
3. b+樹葉子節(jié)點為有序表,效率更高,支持范圍查詢。
當(dāng)前名稱:mysql底層怎么寫 mysql的底層是什么語言
當(dāng)前URL:http://chinadenli.net/article46/hpiieg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站導(dǎo)航、云服務(wù)器、企業(yè)建站、ChatGPT、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)