MySQL 存儲引擎
MySQL簡介:
是一個關系型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬于Oracle公司。
MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站數據庫。
與其他的大型數據庫例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,如規模小、功能有限(MySQL Cluster的功能和效率都相對比較差)等,但是這絲毫也沒有減少它受歡迎的程度。
存儲引擎:
MyISAM
Mysql5.5之前的默認數據庫引擎,最為常用。擁有較高的插入,查詢速度,但不支持事務
InnoDB
事務型數據庫的首選引擎,支持ACID事務,支持行級鎖定, MySQL 5.5起成為默認數據庫引擎
BDB
源自Berkeley DB,事務型數據庫的另一種選擇,支持COMMIT和ROLLBACK等其他事務特性
Memory
所有數據置于內存的存儲引擎,擁有極高的插入,更新和查詢效率。但是會占用和數據量成正比的內存空間。并且其內容會在Mysql重新啟動時丟失
Merge
將一定數量的MyISAM表聯合而成一個整體,在超大規模數據存儲時很有用
Archive
非常適合存儲大量的獨立的,作為歷史記錄的數據。因為它們不經常被讀取。Archive擁有高效的插入速度,但其對查詢的支持相對較差
Federated將不同的Mysql服務器聯合起來,邏輯上組成一個完整的數據庫。非常適合分布式應用
Cluster/NDB
高冗余的存儲引擎,用多臺數據機器聯合提供服務以提高整體性能和安全性。適合數據量大,安全和性能要求高的應用
CSV
邏輯上由逗號分割數據的存儲引擎。它會在數據庫子目錄里為每個數據表創建一個.CSV文件。這是一種普通文本文件,每個數據行占用一個文本行。CSV存儲引擎不支持索引。
BlackHole
黑洞引擎,寫入的任何數據都會消失,一般用于記錄binlog做復制的中繼
EXAMPLE
存儲引擎是一個不做任何事情的存根引擎。它的目的是作為MySQL源代碼中的一個例子,用來演示如何開始編寫一個新存儲引擎。同樣,它的主要興趣是對開發者。EXAMPLE存儲引擎不支持編索引。
另外,Mysql的存儲引擎接口定義良好。有興趣的開發者可以通過閱讀文檔編寫自己的存儲引擎。
從理論上講,完全可以為數據表里的每個字段分別建一個索引,但MySQL把同一個數據表里的索引總數限制為16個。
如何選擇 mysql 的存儲引擎:
1、myisam 存儲:如果對事務要求不高,同時是以查詢和添加為主的,我們考慮此引擎。(比如:bbs的發帖表、回復表)
2、innodb 存儲:對事務要求高,保存的數據都是重復數據,我們建議使用此引擎。(比如:訂單表、賬號表)
3、memory 存儲:比如我們的數據變化頻繁,不需要入庫,同時又頻繁的查詢和修改,我們考慮使用此引擎。
optimize table 的作用:
當您的庫中刪除了大量的數據后,您可能會發現數據文件尺寸并沒有減小。這是因為刪除操作后在數據文件中留下碎片所致。
提供了數據表優化的功能,可以去除刪除操作后留下的數據文件碎片,減小文件尺寸,加快未來的讀寫操作。您只要在做完批量刪除,或定期(如 每一兩個月)進行一次數據表優化操作即可。
OPTIMIZE TABLE只對MyISAM, BDB和InnoDB表起作用。