InnoDB和MyISAM是MySQL最重要的兩種數據存儲引擎,兩者都可用來存儲表和索引,InnoDB的索引和表存儲在同一個文件中,MyISAM的索引和表存儲在不同文件,但即使多個索引,也共存于一個文件。 網絡上很多比較都是基于兩者的事務性處理和鎖處理機制等,似乎InnoDB比MyISAM沒有缺點了。但研究發現,MyISAM在數據特別是索引存儲方面具有突出的優勢,下面就此開展討論。 1. 研究結論 1)InnoDB占用磁盤空間比MyISAM大,MyISAM存儲數據可節省空間12%,存儲索引可節省95%; 2)InnoDB對空閑存儲空間的使用不優。 研究發現,MyISAM可大量節省磁盤空間,特別是對索引的存儲上,優勢巨大,這對大型MySQL數據庫的數據表和索引的物理設計,具有較大的指導意義。 2. 研究對象及獲得的數據 MySQL版本:5.1.26-rc,平臺:RHEL 4,Linux 2.6.9-67.ELsmp x86_64 研究對象為創建的一個表,mytable3,初始為InnoDB類型。有54萬行非重復數據(用隨機函數產生),兩個索引。共進行兩個實驗,獲得的實驗數據如下。
從實驗數據可以看出,表類型alter為MyISAM后,所占磁盤空間僅8MB,為InnoDB的4%。而且隨著表類型改回InnoDB,InnoDB表空間被迫擴充120MB,達到1034MB,以支持該表數據的回遷。
3. 實驗過程 --實驗用表:mytable3, InnoDB類型。 表有三個列,52萬行數據,后兩個列用隨機函數產生,重復行很少。都創建了索引。此時該表數據占用空間256MB,索引占用空間240MB,InnoDB表空間914MB。
--將該表改變類型為MyISAM 發現InnoDB表空間未回縮,但MyISAM占用磁盤容量減少為僅約8MB。此時該表數據占用空間222MB,索引占用空間8MB,InnoDB表空間914MB。
--重新改回InnoDB 發現InnoDB表空間又擴充了。此時該表數據占用空間256MB,索引占用空間240MB,InnoDB表空間1034MB
|
|
來自: wwwijhyt圖書館 > 《數據庫》