一、定義算法
索引是一種數據結果,幫助提升獲取數據的速度數據庫
爲了提升查找速度,有不少查詢優化算法。可是每種查找算法都只能應用於特定數據結構之上。數據結構
索引就是數據庫建立的知足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據優化
二、目前大部分數據庫系統及文件系統都採用B Tree或其變種B+Tree做爲索引結構索引
三、爲何使用B Tree(B+Tree)內存
紅黑樹也可用來實現索引,可是文件系統及數據庫系統廣泛採用B/+Tree,何也?get
通常來講,索引自己也很大,不可能全存內存,每每以索引文件的形式存在磁盤搜索
索引查找過程當中就要產生磁盤I/O消耗,相對於內存存取,I/O存取的消耗要高几個數量級,因此評價一個數據結構做爲索引的優劣最重要的指標就是在查找過程當中磁盤I/O操做次數的漸進複雜度。引用
換句話說,索引的結構組織要儘可能減小查找過程當中磁盤I/O的存取次數developer
四、MyISAM索引實現
MyISAM引擎使用B+Tree做爲索引結構,葉節點data域存放數據記錄的地址
MyISAM中索引檢索的算法爲首先按照B+Tree搜索算法搜索索引,若是指定的Key存在,則取出其data域的值,而後以data域的值爲地址,讀取相應數據記錄。
MyISAM的索引方式也叫作「非彙集」的,之因此這麼稱呼是爲了與InnoDB的彙集索引區分
五、InnoDB索引實現
InnoDB的數據文件自己就是索引文件
表數據文件自己就是按B+Tree組織的一個索引結構,這棵樹的葉節點data域保存了完整的數據記錄。這個索引的key是數據表的主鍵,所以InnoDB表數據文件自己就是主索引
葉節點包含了完整的數據記錄。這種索引叫作彙集索引。