索引是一種資料結果,幫助提高獲取資料的速度
為了提高查詢速度,有很多查詢優化演算法。但是每種查詢演算法都只能應用於特定資料結構之上。
索引就是資料庫建立的滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料
目前大部分資料庫系統及檔案系統都採用b tree或其變種b+tree作為索引結構
相關概念介紹
紅黑樹也可用來實現索引,但是檔案系統及資料庫系統普遍採用b/+tree,為什麼?
一般來說,索引本身也很大,不可能全存記憶體,往往以索引檔案的形式存在磁碟
(1)單節點能儲存更多資料,使得磁碟io次數更少。
(2)葉子節點形成有序鍊錶,便於執行範圍操作。
(3)聚集索引中,葉子節點的data直接包含資料;非聚集索引中,葉子節點儲存資料位址的指標。
1.普通索引index :加速查詢
2.唯一索引
3.聯合索引
(id,name):聯合主鍵索引
(id,name):聯合唯一索引
(id,name):聯合普通索引
聚集索引和非聚集索引使用的都是b+樹結構。
非聚集索引的葉子節點為索引節點,但是有乙個指標指向資料節點。
myisam是非聚集索引。
聚集索引葉子節點就是資料節點。
關於聚集索引,innodb會按照如下規則進行處理:
1,如果乙個主鍵被定義了,那麼這個主鍵就是作為聚集索引
2,如果沒有主鍵被定義,那麼該錶的第乙個唯一非空索引被作為聚集索引
3,如果沒有主鍵也沒有合適的唯一索引,那麼innodb內部會生成乙個隱藏的主鍵作為聚集索引,這個隱藏的主鍵是乙個6個位元組的列,改列的值會隨著資料的插入自增。
innodb的普通索引,唯一索引,聯合索引都是輔助索引,採用非聚集索引結構。innodb的所有輔助索引都引用主鍵作為data域。
聚集索引這種實現方式使得按主鍵的搜尋十分高效,但是輔助索引搜尋需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然後用主鍵到主索引中檢索獲得記錄。
Mysql Mysql索引詳解
索引概述 mysql資料庫系統除了儲存資料之外,為了能夠提高對資料的快速訪問,mysql為此設計了索引,mysql索引是一種可以快速提高mysql高效查詢資料的一種資料結構。舉個例子索引就跟我們的書本的目錄一樣,如果一本書沒有目錄,那麼你要找想看的地方,那會是相當費勁的,只能一頁頁去翻,而資料庫的索...
索引 mysql MySql索引那些事
概述一 什麼是索引 資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。就像我們以前用的新華字典的目錄一樣,能幫助我們快速查詢到某乙個字。二 索引的分類 分類角度索引名稱 資料結構b 樹,hash索引,r tree等 儲存層面聚簇索引,非聚簇索引 邏輯層面主鍵索引,...
MySQL MySQL神器之索引
索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。如果想按特定職員的姓來查詢他或她,則與在表中搜尋所有的行相比,索引有助於更快地獲取資訊。索引的乙個主要目的就是加快檢索表中資料,亦即能協助資訊搜尋者盡快的找到符合限制條件的記錄id的輔助資料結構。在 mysq...