MyISAM 和 InnoDB 索引結構及其實現原理

  1. 數據庫索引,是數據庫管理系統中一個排序的數據結構,以協助快速查詢、更新數據庫表中數據。mysql

  2. 索引的實現一般使用B_TREE。
    B_TREE索引加速了數據訪問,由於存儲引擎不會再去掃描整張表獲得須要的數據;
    相反,它從根節點開始,根節點保存了子節點的指針,存儲引擎會根據指針快速尋找數據。算法

  3. MyISAM引擎 使用B+Tree做爲索引結構,葉節點的data域存放的是數據記錄的地址.
    即:MyISAM索引文件和數據文件是分離的,MyISAM的索引文件僅僅保存數據記錄的地址。
    MyISAM中索引檢索的算法爲首先按照B+Tree搜索算法搜索索引,
    若是指定的Key存在,則取出其data域的值,而後以data域的值爲地址,讀取相應數據記錄。
    MyISAM的索引方式也叫作「非彙集」的。
    物理文件結構爲:
    .frm文件:與表相關的元數據信息都存放在frm文件,包括表結構的定義信息等。
    .myd(mysql data)文件:myisam存儲引擎專用,用於存儲myisam表的數據
    .myi(mysql index)文件:myisam存儲引擎專用,用於存儲myisam表的索引相關信息sql

  4. InnoDB引擎 也使用B+Tree做爲索引結構,可是InnoDB的數據文件自己就是索引文件,葉節點data域保存了完整的數據記錄。
    這個索引的key是數據表的主鍵,所以InnoDB表數據文件自己就是主索引。這種索引叫作「聚焦索引」。
    InnoDB的輔助索引的data域存儲相應記錄主鍵的值而不是地址。
    換句話說,InnoDB的全部輔助索引都引用主鍵做爲data域。
    彙集索引這種實現方式使得按主鍵的搜索十分高效,可是輔助索引搜索須要檢索兩遍索引:
    首先檢索輔助索引得到主鍵,而後用主鍵到主索引中檢索得到記錄。
    InnoDB的索引實現後,不建議使用過長的字段做爲主鍵,由於全部輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。
    在InnoDB中也不建議使用非單調的字段做爲主鍵,
    由於InnoDB數據文件自己是一顆B+Tree,非單調的主鍵會形成在插入新記錄時數據文件爲了維持B+Tree的特性而頻繁的分裂調整,十分低效,建議使用自增字段做爲主鍵。
    物理文件結構爲:
    .frm與表相關的元數據信息都存放在frm文件,包括表結構的定義信息等。
    .ibd文件和.ibdata文件:
    這兩種文件都是存放innodb數據的文件,之因此用兩種文件來存放innodb的數據,是由於innodb的數據存儲方式可以經過配置來決定是使用共享表空間存放存儲數據,仍是用獨享表空間存放存儲數據。
    獨享表空間存儲方式使用.ibd文件,而且每一個表一個ibd文件;
    共享表空間存儲方式使用.ibdata文件,全部表共同使用一個ibdata文件;
    以爲使用哪一種方式的參數在mysql的配置文件中 innodb_file_per_table;數據庫

相關文章
相關標籤/搜索