天天看點

資料庫學習總結(用于考研複試)

隻整理了一小部分,有錯誤還請各位大哥指正!

0.B樹和B+樹的差別(重點)

B+樹是應資料庫所需而出現的一種B樹的變形。

B+樹結點的子樹個數=關鍵字個數。而B樹子樹個數-1=關鍵字個數。

B+樹僅在葉子節點存儲索引對應資訊(而B樹則每個節點中都存放了索引對應資訊),是以一個磁盤可以存下更多的索引元素,大大減少磁盤通路操作。這也是為什麼大多數資料庫選擇B+樹的主要原因。

B+樹葉子節點間有雙向的指針,支援順序查找、範圍查找。

1.當資料量很大時如何對查詢做一些優化

在資料庫中建立索引,索引是幫助資料庫高效擷取資料的排好序的資料結構,相當于設定了一個目錄。

2.常見的MySQL主要的兩種索引結構

Hash索引和B+ 樹索引

3.mysql底層為什麼采用B+樹而不是其他

對于Hash表而言:B+樹葉子節點有指針相連,支援範圍查找,而Hash不支援(緻命缺點)。不支援多列聯合索引的最左比對規則。并且Hash存在哈希碰撞的情況。

對于紅黑樹而言:B+樹的樹的高度更矮,可以減少磁盤通路操作。

對于B樹而言:B+樹僅在葉子節點存儲索引對應資訊,是以一個磁盤可以存下更多的索引元素,大大減少磁盤通路操作。并且B+樹支援範圍查找。

4.InnoDB存儲引擎(預設B+樹索引)

InnoDB基于磁盤存儲,即資料都是存儲在磁盤上的,由于 CPU 與磁盤的速度差很大, 是以使用緩沖池技術來提高資料庫的整體性能。

5.B+ 樹的葉子節點都可以存哪些東西?兩者有什麼差別嗎? 

可能存儲的是整行資料,也有可能是主鍵的值。

在 InnoDB 裡,B+ 樹的葉子節點存儲了整行資料的是聚集索引。而存儲了主鍵的值的是非聚集索引,此時還需回表查詢對應資料。

6.最左字首原則

即最左優先,在檢索資料時從聯合索引的最左邊開始比對,并且不能跳過索引中的列。

查詢語句必須包含所有列, 或者第一列,前兩列, 前三列, 以此類推...隻是不能跳過索引中的列,如果跳過則會使B+樹的查找退化成順序查找。

(因為隻有在前一個字段相等情況下該字段才有序,是以跳過前一個字段直接查找相當于需要順序查找。)

7.事務

是使用者定義的一個資料庫操作序列,這些操作要麼全做,要麼全不做,是一個不可分割的工作機關。(原子性、一緻性、隔離性、永久性)

8. 範式

可以了解為一張資料表的表結構所滿足的某種設計标準的級别。

1NF:符合一範式的表中的屬性都不可再分。(問題:資料備援,增删改異常)

2NF:看資料表中是否存在非主屬性對碼的部分函數依賴。不存在則屬于第二範式。

碼:可以确定一條資料的屬性的集合。

非主屬性:除了碼的其他屬性。

部分函數依賴:非主屬性可以由碼中的一部分決定。而不是需要整個碼才能決定。(相對于完全函數依賴)如姓名這個非主屬性可以由碼的一部分(學号)決定,是以是部分函數依賴。

3NF:看資料表中是否存在非主屬性對碼的傳遞函數依賴。不存在則屬于第三範式。

傳遞函數依賴:A依賴B,B依賴C,那麼A依賴C。

學習位址:​​https://www.bilibili.com/video/BV14Z4y1d7Zr?p=2​​ (前50min是幹貨,後面都是廣告。。)