mysql隨手總結

1. 索引

索引:是排好序數據結構。很重要這句話

以至於有一個索引是 (“name”,"age")的話

查詢語句是

select age from student where age = 1 是不會進入索引的,因爲底層索引是排好序的

索引底層如果因爲的BTree的話就會按照索引創建順序,依次排序

2.B-Tree和B+Tree的區別

B+Tree是B-Tree改進版,適用於Mysql,

B+Tree中的非葉子節點的data移動到葉子節點,但是B-Tree是存在Data,不存在Data可以節省空間,存儲更多非葉子節點

B+Tree葉子節點之間是從左到右依次遞增排好序的,葉子節點之間是有相互指針箭頭的,主要改進是爲了範圍查找

二叉樹和紅黑樹(二叉平衡樹)的高度不可控

B+Tree第一層非葉子節點是常駐磁盤的

3.存儲引擎

存儲引擎是形容數據庫表的,表信息是存儲在本地磁盤上的

一. MylSAM存儲引擎:索引文件和數據庫文件是分離的(非聚集)

MylSAM是表級鎖,所以對寫操作不友好

本地磁盤存儲表的時候有三個文件夾

 frm:表結構相關信息  MYD :MylSAM + data數據的簡寫  MYI : MylSAM + index的簡寫

查詢步驟:舉例COL1 = 1

第一步:先檢查COL1是否是索引字段

第二步:在MYI中查找索引文件,找到磁盤地址

第三步:根據磁盤地址找到MYD文件中對應的主鍵從而找到對應的數據

二.InnoDB引擎 (聚集)

InnoDB是行級鎖,對寫友好,查詢慢,支持事務

本地磁盤存儲表的時候有兩個文件

frm:表結構相關信息 idb : index + data

查詢步驟:舉例COL1 = 1

第一步:先檢查COL1是否是索引字段

第二步:在idb中查找索引文件和數據文件

既是索引未見也是數據文件,在ibd就可以查找

聚集索引,葉節點包含了完整的數據記錄

4. 問題彙總及解答

一,不建立多個單值索引

二,索引最左前綴原則:不能裏哦啊過任何一個值,只能從第一個開始用,從第二個是不走索引的,原因是索引都是排好序的數據結構,從第二個開始查詢就不是排好序的了

三,聚集索引:葉節點包含數據+索引 (一個文件中查詢)

非聚集索引:葉節點只包含索引:兩個文件中查詢,數據和索引是分開的

四:InnoDB表必須建立主鍵,並推薦使用整形的自增類型

設計如此,如果沒有主鍵會自己找一列,當前列的數據是不重複的,會作爲默認主鍵,如果沒有會建立隱藏列增加磁盤壓力。

自增的整型是因爲會經歷比大小,整型比較快,省時間和內存,佔用存儲空間比較小,效率比較高

五,爲什麼非主鍵的索引結構葉子節點存儲的是主鍵值

一致性得到保證,而且節省存儲空間

六,爲什麼索引用B+tree而不用Hash的原因

因爲範圍查找。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章