数据库---mysql的索引和引擎
mysql 的索引和引擎
mysql的數據都是存放在磁盤上的,都說索引會使查詢變快,那么肯定是索引用了特殊的數據結構。
常見的數據結構有:
hash
hash就是咱們在hashMap中的那個hash,用hash確實快,而且時間復雜度是O(1),但是hash不適合范圍查詢,所以索引的主要數據結構應該不是hash。
二叉樹
普通二叉樹作為最初的樹形結構,確實在某些情況下就很快了,但是由于對于自增id這種索引,二叉樹會極度傾斜,最差的情況就是一條枝,所以也不適合做索引的結構。
紅黑樹
同理,紅黑樹在平衡上做了改進,但是針對自增id這種索引,在數據量很大的情況下,仍然會出現整體右傾的狀況,所以紅黑樹也不是很適合。
B+tree
對,就剩B+tree了,由于這個樹的設計原因,他會極度平衡,所以結論就是索引用的數據結構就是他。
mysql 常見的引擎
查詢性能極佳,但不支持事務
查詢性能稍遜MyISAM,但支持事務
為什么MyISAM引擎會比INNODB引擎查詢性能還快
這個要從存儲文件來看,分別設置兩種引擎,存儲相同的數據,我們在本地測試的時候會發現兩種引擎有不同的文件存儲。
.frm:存儲表的結構
.ibd:存儲表的索引和內容
.frm:存儲表的結構
.MYD:存儲表的內容
.MYI:存儲表的索引
我們可以從上面的對比看出,MyISAM對于表的內容和索引是分開存儲的,而INNODB是在一個文件存儲的,簡單理解,同樣的內容和索引,合在一起存儲,那么這個文件必然就會比較大,相比MyISAM引擎的 .MYI來說,所以文件越大,那么查詢就會越慢。
而且,從上面的對比也能看出,INNODB引擎存儲表的索引和內容,是一個文件,這也是為什么他能支持事務的一個原因,而MyISAM引擎對于索引和內容是分開的,所以這也是他不支持事務的一個原因吧。
總結
以上是生活随笔為你收集整理的数据库---mysql的索引和引擎的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React Native使用指南-在设备
- 下一篇: java基础 --- Arrays.as