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