下面主要就兩個方面進行探討
INNODBy引擎和B-TREE存儲
之前一問innodb有什麼特別?一說支持事務,支持樂觀鎖(行級鎖),寫入比查詢快。然後就沒了
這不能怪我,主要是我之前讀書少,之前的狀態就是:讀書少,想的多(這是很多應屆生通病,我正視)
上面的說的innodb的三個特點,我現在只信服兩個,因為自從mysql5.0以後,innodb的讀寫速度差距已經不是那麼大了。
因為這個innodb的存儲引擎有關系。B-tree存儲。
MYISAM引擎
之前一說:myisam引擎,之前的理解是:讀的數據快,但不支持事務,支持悲觀鎖(表鎖)
現在的理解是 Myisamz支持全文索引(是一種關鍵字提取),在沒有where的條件下select count(*)速度塊,因為它有一個AUTO_INCREMENT
myisam的存儲方式是三個文件,這三個文件是跨平台的。如果存儲在CD-ROM這類只讀的介質上面,而且MYISAM支持壓縮。它就有,空間小,速度快的特點。有這個特性,它立足MYSQL眾多引擎中的一員是完全有地位的。
說到最後:使用什麼引擎或者建立什麼類型的索引都是看應用場景。在我現在的工作中80%的場景都是innodb。
但如果可以容忍數據錯誤,或者對數據的正確性不是很強烈的要求。那麼myisam也是不錯的選擇。
在說說哈希索引:
哈希索引是順序存儲的,而哈希索引的存儲比較緊湊,所有查找會比較快速。(這裡只有memory引擎是用的哈希索引,mysql的臨時表都是用的這個引擎,如果臨時表太大,臨時表就沒被寫到硬盤上,那時的引擎是MYISAM)
基於這個原因,索引插入的開銷比較大,需要維護哈希表。這就是為什麼讀越快於寫了。
最後在說兩句:
然後再說一個,之前一直覺得很高大的上的東西,就是讀寫分離。
如果做到讀寫分離,我之後會寫一個博文專門說實現過程。這裡先說原理:MYSQL的主從復制
MYSQL5.0以後支持了二進制同步。這樣,就做一個數據庫做主庫專門用來寫數據,然後另一個數據庫做從庫專門用來查數據。