innodb索引文件和數(shù)據(jù)文件 MyISAM和InnoDB的索引在實(shí)現(xiàn)上的不同?
MyISAM和InnoDB的索引在實(shí)現(xiàn)上的不同?MyISAM和InnoDB compare MyISAM:這是默認(rèn)類型,基于傳統(tǒng)的ISAM類型。ISAM是索引順序存取方法的縮寫,它是存儲記錄和文件的標(biāo)
MyISAM和InnoDB的索引在實(shí)現(xiàn)上的不同?
MyISAM和InnoDB compare MyISAM:這是默認(rèn)類型,基于傳統(tǒng)的ISAM類型。ISAM是索引順序存取方法的縮寫,它是存儲記錄和文件的標(biāo)準(zhǔn)方法。與其他存儲引擎相比,MyISAM擁有最多的檢查和修復(fù)表的工具
~]。如果表沒有主鍵,InnoDB會在表中添加一個隱藏的自動遞增的6字節(jié)計(jì)數(shù)器,并使用隱藏的計(jì)數(shù)器作為主鍵。InnoDB的隱藏主鍵有一些問題。您應(yīng)該始終在表上定義一個顯式主鍵,并通過主鍵值訪問所有InnoDB行。
InnoDB的二級索引也是一個B樹。搜索關(guān)鍵字由索引列組成,存儲的值是匹配行的主鍵。通過二級索引進(jìn)行搜索通常會導(dǎo)致主鍵的隱式搜索。
什么是B樹?
B樹是用于優(yōu)化塊設(shè)備操作的數(shù)據(jù)結(jié)構(gòu)。塊設(shè)備或磁盤具有顯著的數(shù)據(jù)訪問延遲,尤其是機(jī)械硬盤。隨機(jī)檢索單個字節(jié)所花費(fèi)的時間并不比檢索較大的數(shù)據(jù)少。這就是B-樹的基本原理。InnoDB使用16kb的數(shù)據(jù)頁。
讓我們嘗試簡化B-樹的描述。B-樹是圍繞這個鍵組織的數(shù)據(jù)結(jié)構(gòu)。該鍵用于在B樹中搜索數(shù)據(jù)。B-樹通常有多個層次。數(shù)據(jù)只存儲在底層,即葉節(jié)點(diǎn)。其他級別的頁(節(jié)點(diǎn))僅包含下一級別頁的鍵和指針。
如果要訪問鍵值的數(shù)據(jù),請從頂級節(jié)點(diǎn)根節(jié)點(diǎn)開始,將其包含的鍵值與搜索值進(jìn)行比較,然后在下一級找到要訪問的頁面。重復(fù)此過程,直到到達(dá)最后一級,葉節(jié)點(diǎn)。理論上,每個B樹級別的讀取都需要一個磁盤讀取操作。在實(shí)際應(yīng)用中,內(nèi)存緩存節(jié)點(diǎn)數(shù)量少,訪問頻繁,適合緩存。
簡單的三級B樹結(jié)構(gòu)