MySQL InnoDB存儲引擎簡析

MySQL存儲引擎

InnoDB存儲引擎

特色:sql

  • 支持事務
  • 行級鎖
  • B樹組織索引
  • 支持外鍵

InnoBD 多版本(multi-versioned)

InnoDB默認爲每一行記錄添加了三個字段:ui

  • DB_TRX_ID (6byte): 該記錄最近一次發生inserted或updated操做的事務標識
  • DB_ROLL_PTR (7byte): 回滾指針,指向rollback segment中的undo log記錄,undo log記錄中包含updated操做以前的行數據
  • DB_ROW_ID (6byte): 新插入行的單調遞增ID,當由InnoDB自動生成聚簇索引時,該索引包含Row ID的值,不然DB_ROW_ID列不會出如今任何索引中

聚簇索引(Clustered Index)

每一個InnoDB表都有一個用來存儲全部行數據的特殊索引:Clustered Index。全部行數據都是經過聚簇索引來組織存儲的。 一般狀況下,聚簇索引是主鍵的代名詞。指針

若是沒有爲InnoDB表定義一個主鍵,Mysql會選擇表中第一個非空的惟一索引列作爲聚簇索引。若該表沒有主鍵或合適的惟一索引列,InnoDB內部會在包含row ID的虛擬列上生成一個隱藏的聚簇索引。Row ID的值是根據新插入記錄的順序而單調遞增的。code

官方文檔:索引

If the table has no PRIMARY KEY or suitable UNIQUE index, InnoDB internally generates a hidden clustered index on a synthetic column containing row ID values. Thus, the rows ordered by the row ID are physically in insertion order.事務

輔助索引(Secondary Index)

除了聚簇索引以外的全部索引稱爲輔助索引。文檔

在InnoDB中,輔助索引的每一條記錄存儲該行的全部主鍵字段,這些主鍵字段。InnoDB使用主鍵的值在聚簇索引中查找對應的記錄。it

InnoDB索引的物理結構

  • 全部的InnoDB索引都是以B樹的形式存儲的,索引記錄存儲在樹的葉子節點。
  • 聚簇索引存儲記錄的全部字段,包含6個字節的transaction ID 字段和7個字節的roll pointer字段。
  • 若沒有爲表設置主鍵,每一個聚簇索引記錄還會包含一個6字節的row ID字段。
  • 每一個輔助索引記錄包含主鍵的值

覆蓋索引(covering index)

覆蓋索引:從輔助索引中就能夠獲得查詢的記錄,而不須要查詢聚簇索引中的記錄。io

使用覆蓋索引的好處: 輔助索引不包含整行記錄的全部字段信息,故其大小遠小於聚簇索引,所以能夠減小大量的IO操做。table

MyISAM存儲引擎

特色:

  • 不支持事務
  • 表級鎖
  • 不支持外鍵
  • MyISAM表存儲有三個文件組成:
    • table_name.frm 存儲表結構
    • table_name.MYD 數據文件
    • table_name.MYI 索引文件
相關文章
相關標籤/搜索