2010-03-02 45 views
10

當我在mysql中爲表創建索引時,我看到index_type是BTREE類型。現在,雖然我瞭解btree,但我並不清楚它是如何存儲索引的,以及數據庫如何基於此來搜索記錄。B樹索引如何在mysql中工作

我的意思是,B樹是優秀的數據庫進行讀取和寫入大數據塊, 當我們創建列類型的Primary key索引,我的理解是,它的根創建了一個樹和分裂值基於根的值類型。

現在,它是否只在主樹下存儲主鍵ID或與主鍵關聯的整個數據?

找到想要的主ID後,數據庫如何提取記錄?

回答

20

數據庫存儲的索引值爲B-Tree鍵,記錄指針值爲B-Tree值。

每當您搜索保存索引列的某個值的記錄時,引擎就會找到保存該值的密鑰B-Tree,檢索指向該記錄的指針並獲取記錄。

「記錄指針」究竟是什麼,取決於存儲引擎。

  • MyISAM,記錄指針是一個偏移量來在MYI文件中的記錄。

  • InnoDB中,記錄指針是PRIMARY KEY的值。

InnoDB,表本身是一個B-TreePRIMARY KEY作爲B-Tree鍵。這就是所謂的「聚集索引」或「索引組織表」。在這種情況下,所有其他字段都以B-Tree的值存儲。

MyISAM中,記錄沒有任何特殊的順序存儲。這被稱爲「堆存儲」。

+0

感謝您的解釋。在我的數據庫中,我有一些使用MyISAM的表,有些使用帶有索引的InnoDB。這是否會影響我寫的連接和查詢都是不同的類型? – JPro 2010-03-02 11:27:43

+1

@JPro:數據庫自動處理基礎索引細節。 'MyISAM'和'InnoDB'表的'JOIN'語法相同。 – Quassnoi 2010-03-02 11:31:50

+0

我的意思是說,用相同的存儲引擎創建所有的表是否重要? – JPro 2010-03-02 11:38:07