標籤:文檔 聚集 sql png cluster insert 方式 size 緩衝
第1章 MySQL體繫結構和儲存引擎1.3 MySQL儲存引擎
資料庫和檔案系統最大的區別在於:資料庫是支援事務的
InnoDB儲存引擎:
MySQL5.5.8之後預設的儲存引擎,主要面向OLTP(聯機交易處理,面向基本的、日常的交易處理)
支援事務,支援外鍵、支援行鎖(有的情況下也會鎖住整個表)、非鎖定讀(預設讀取操作不會產生鎖)
通過使用MVCC來擷取高並發性,並且實現sql標準的4種隔離等級,預設為可重複讀層級
使用一種被稱成next-key locking的策略來避免幻讀(phantom)現象
還提供了插入緩衝(insert buffer)、二次寫(double write)、自適應雜湊索引(adaptive hash index)、預讀(read ahead)等高效能技術。
表資料採用聚集方式,每張表的儲存都按主鍵的順序進行存放。
MyISAM儲存引擎:
不支援事務、支援全文索引,表鎖設計,主要面向一些OLAP(線上分析處理,資料倉儲的主要應用)。
它的緩衝池只緩衝索引檔案,而不緩衝資料檔案.
該儲存引擎表由MYD和MYI組成,MYD用來存放資料檔案,MYI用來存放索引檔案.
NDB:
是一個叢集儲存引擎,其特點是資料全部放在記憶體中。
因此主鍵尋找速度極快,並通過添加NDB資料庫儲存節點可以線性提高資料庫效能,是高可用,高效能的叢集系統。
Memory:
將表中的資料存放在記憶體中,如果資料庫重啟或發生崩潰,表中的資料都將消失。
它非常適合儲存臨時資料的暫存資料表.預設採用雜湊索引。
只支援表鎖,並發性較差。
第5章 索引與演算法5.1 InnoDB儲存引擎索引概述
Innodb儲存引擎支援以下幾種常見的索引:
B+樹索引
全文索引
雜湊索引
自適應雜湊索引特性:InnoDB儲存引擎會根據表的使用方式自動為表產生雜湊索引,不能人為幹預是否在表中產生雜湊索引。
B+樹索引並不能找到一個給定索引值的具體行。B+樹索引能找到的只是被尋找資料行所在的頁。然後資料庫通過把頁讀入到記憶體,再在記憶體中進行尋找,最後得到要尋找的資料。
5.3 B+樹
為磁碟或其他存取輔助裝置設計的一種平衡尋找樹。
所有記錄點按大小順序存放在同一層的葉子節點上。
各葉子節點由指標進行串連。
5.4 B+樹索引
B+索引在資料庫中有一個特點是高扇出性
B+樹的高度一般在2~4層,這也就是說尋找某一索引值的行記錄時最多隻需要2到4次IO。
扇入:指直接調用該模組的上級模組的個數。
扇出:是指該模組直接調用的下級模組的個數。
B+樹索引可以分為叢集索引(clustered index)和輔助索引(secondary index),但是不管是聚集還是輔助索引,其內部都是B+樹的,即高度平衡的,葉子節點存放著所有的資料。
叢集索引和輔助索引不同的是,葉子節點存放的是否是一整行的資訊。
叢集索引:
叢集索引就是按照每張表的主鍵構造一棵B+樹。
葉子節點中存放的是整張表的行記錄資料,葉子節點也成稱為資料頁。
索引組織表中資料也是索引的一部分。同B+樹資料結構一樣,每個資料頁通過一個雙向鏈表來進行連結。
叢集索引能夠特別快的訪問針對範圍值的查詢。
很多文檔寫著:叢集索引按照順序,物理地儲存資料。
但是這本書上寫的是:叢集索引的儲存並不是物理上連續的,而是邏輯上連續的。(我也不知道哪個是對的)
這其中的兩點:一是前面說過的頁通過雙向鏈錶鏈接,頁是按照主鍵的順序排序;
另一點是每個頁中的記錄也是通過雙向鏈表進行維護的,實體儲存體上可以同樣不按照主鍵儲存。
叢集索引的另外一個好處是,它對於主鍵的排序尋找和範圍尋找速度非常快。
輔助索引(非叢集索引):
葉子節點並不包含行記錄的全部資料。
葉子節點除了包含索引值外,每個葉子節點中的索引行中還包含了一個書籤(bookmark)。
該書籤用來告訴innodb儲存引擎哪裡可以找到與索引相對於的行資料。
輔助索引的存在並不影響資料在叢集索引中的組織,因此每張表上可以有多個輔助索引。
當通過輔助索引來尋找資料時,innodb儲存引擎會遍曆輔助索引並通過頁基本的指標獲得指向主鍵索引的主鍵,然後再通過主鍵索引來找到一個完整的行記錄。
《MySQL技術內幕 InnoDB儲存引擎 》學習筆記