當我在mysql中爲表創建索引時,我看到index_type是BTREE
類型。現在,雖然我瞭解btree,但我並不清楚它是如何存儲索引的,以及數據庫如何基於此來搜索記錄。B樹索引如何在mysql中工作
我的意思是,B樹是優秀的數據庫進行讀取和寫入大數據塊, 當我們創建列類型的Primary key
索引,我的理解是,它的根創建了一個樹和分裂值基於根的值類型。
現在,它是否只在主樹下存儲主鍵ID
或與主鍵關聯的整個數據?
找到想要的主ID後,數據庫如何提取記錄?
當我在mysql中爲表創建索引時,我看到index_type是BTREE
類型。現在,雖然我瞭解btree,但我並不清楚它是如何存儲索引的,以及數據庫如何基於此來搜索記錄。B樹索引如何在mysql中工作
我的意思是,B樹是優秀的數據庫進行讀取和寫入大數據塊, 當我們創建列類型的Primary key
索引,我的理解是,它的根創建了一個樹和分裂值基於根的值類型。
現在,它是否只在主樹下存儲主鍵ID
或與主鍵關聯的整個數據?
找到想要的主ID後,數據庫如何提取記錄?
數據庫存儲的索引值爲B-Tree
鍵,記錄指針值爲B-Tree
值。
每當您搜索保存索引列的某個值的記錄時,引擎就會找到保存該值的密鑰B-Tree
,檢索指向該記錄的指針並獲取記錄。
「記錄指針」究竟是什麼,取決於存儲引擎。
在MyISAM
,記錄指針是一個偏移量來在MYI
文件中的記錄。
在InnoDB
中,記錄指針是PRIMARY KEY
的值。
在InnoDB
,表本身是一個B-Tree
與PRIMARY KEY
作爲B-Tree
鍵。這就是所謂的「聚集索引」或「索引組織表」。在這種情況下,所有其他字段都以B-Tree
的值存儲。
在MyISAM
中,記錄沒有任何特殊的順序存儲。這被稱爲「堆存儲」。
感謝您的解釋。在我的數據庫中,我有一些使用MyISAM的表,有些使用帶有索引的InnoDB。這是否會影響我寫的連接和查詢都是不同的類型? – JPro 2010-03-02 11:27:43
@JPro:數據庫自動處理基礎索引細節。 'MyISAM'和'InnoDB'表的'JOIN'語法相同。 – Quassnoi 2010-03-02 11:31:50
我的意思是說,用相同的存儲引擎創建所有的表是否重要? – JPro 2010-03-02 11:38:07