Mysql常見的引擎


常用的引擎是:Innodb和Myiasm這兩種引擎:

innodb:

提供了對事務的ACID操作,還提供了行級鎖和外鍵約束,,他的優勢就是處理大量數據,在msql啟動的時候,首先會建立一個緩存池,主要是緩存數據和索引,但是操作大規模的數據查找時很慢,所以建議當需要數據庫的事務操作時,使用這個,還有就是在寫的時候不會鎖定全表,所以在大規模並發操作的時候會提高效率;

Myiasm:

 這個是默認的引擎,不提供事務和行級鎖和外鍵約束,當在insert和update時會鎖定全表,所以在執行寫操作對的時候效率會很慢, 
和innodb不同的是,myiasm保留了行數,所以在執行select count(*) from 的時候會很快,不需要掃描全表,當我們執行的讀操作多於寫操作的時候,並且不需要事務的支持,我們可以使用myisam這個引擎。

這兩種引擎的數據結構都是B+樹 

存儲的不同: 

mysisam樹節點存儲得是數據的地址,指向實際的數據; 
innodb樹節點存儲得是實際的數據;這種索引也被稱為聚集索引

常見的引擎

InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive

MyISAM:Mysql 5.0之前的默認數據庫引擎,最為常用。擁有較高的插入,查詢速度,但不支持事務

InnoDB:事務型速記的首選引擎,支持ACID事務,支持行級鎖定,MySQL5.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 的存儲引擎接口定義良好。可以通過閱讀文檔編寫自己的存儲引擎。

 

MyISAM引擎特點

1、不支持事務(事務是指邏輯上的一組操作,組成這組操作的各個單元,要么全成功,要么全失敗)
2、表級鎖定(數據更新時鎖整個表):其鎖定機制是表級鎖定,這雖然可以讓鎖定的實現成本很小但是也同時大大降低了其並發性能。
3、讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,MyISAM還會在讀取的時候阻塞寫入,但讀本身並不會阻塞另外的讀。
4、只會緩存索引:MyISAM可以通過key_buffer_size緩存索引,以大大提高訪問性能減少磁盤io,但是這個緩存區只會緩存索引,而不會緩存數據。
5、讀取速度較快,占用資源相對少
6、不支持外鍵約束,但支持全文索引
7、MyISAM引擎是mysql5.5.5前缺省的存儲引擎

MyISAM引擎適用的生產環境

1、不需要事務支持的業務(例如轉賬就不行,充值付款)
2、一般為讀數據比較多的應用,讀寫都頻繁場景不合適,讀多或者寫少的都合適。
3、讀寫並發訪問相對較低的業務(純讀純寫高並發也可以)(鎖定機制問題)
4、數據修改相對較少的業務(阻塞問題)。
5、以讀為主的業務,例如:www,blog,圖片信息數據庫,用戶數據庫,商品庫等業務
6、對數據一致性要求不是非常高的業務。
7、硬件資源比較差的機器可以用MyISAM。
單一對數據庫的操作都可以使用MyISAM,所謂單一就是盡量純讀,或純寫(insert,update,delete)等。

MyISAM引擎調優

1、設置合適的索引(緩存機制)
2、調整讀寫優先級,根據實際需求確保重要操作更優先執行。
3、啟用延遲插入改善大批量寫入性能(降低寫入頻率,盡可能多條數據一次性寫入)
4、盡量順序操作讓insert數據都寫入到尾部,減少阻塞。
5、分解大的時間長的操作,降低單個操作的阻塞時間。
6、降低並發數(減少對mysql訪問),某些高並發場景通過應用進行排隊隊列機制Q隊列
7、對於相對靜態(更改不頻繁)的數據庫數據,充分利用Query Cache或memcached緩存服務可以極大的提高訪問效率。
grep query my.cnf
query_cache_size = 2M
query_cache_limit = 1M
query_cache_min_res_unit = 2k

8、MyISAM的count只有在全表掃描的時候特別高效,帶有其他條件的count都需要進行實際的數據訪問
select count(*) from oldboy.zizeng;

9、可以把主從同步的主庫使用innodb,從庫使用myisam引擎(但是在為了主從切換的時候還是要用innodb,所以這個不現實。)

 InnoDB引擎特點

1、支持事務:支持4個事務隔離級別,支持多版本讀。
2、行級鎖定(更新時一般是鎖定當前行):通過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響。
3、讀寫阻塞與事務隔離級別相關。
4、具有非常高效的緩存特性:能緩存索引,也能緩存數據。
5、整個表和主鍵以cluster方式存儲,組成一顆平衡樹。
6、所有secondary index都會保存主鍵信息。
7、支持分區,表空間,類似oracle數據庫。
8、支持外鍵約束,5.5以前不支持全文索引,以后支持了。
9、和Myisam引擎相比,innodb對硬件資源要求比較高。

innodb引擎適用的生產環境

1、根據事務支持的業務(具有較好的事務特性)
2、行級鎖定對高並發有很好的適應能力,但需要確保查詢是通過索引完成的。
3、數據讀寫及更新都較為頻繁的場景,如:BBS,SNS,微博,微信等。
4、數據一致性要求較高的業務,例如:充值轉賬,銀行卡轉賬。
5、硬件設備內存較大,可以利用innodb較好的緩存能力來提高內存利用率,盡可能減少磁盤io。
共享表空間對應物理數據文件
獨立表空間對應物理數據文件
6、相比myisam,innodb更消耗資源,速度沒有myisam快

innodb引擎的調優

1、主鍵要盡可能小,避免給secondary index帶來過大的空間負擔。
2、避免全表掃描,因為會使用表鎖
3、盡可能緩存所有的索引和數據,提高響應速度,減少磁盤io消耗。
4、在大批量小插入的時候,盡量自己控制事務而不要使用autocommit自動提交,有開關可以控制提交方式。
5、合理設置innodb_flush_log_at_trx_commit參數值,不要過度追求安全性。
如果innodb_flush_log_at_trx_commit的值為0,log buffer 每秒就會被刷寫日志文件到磁盤,提交事務的時候不做任何操作。
6、避免主鍵更新,因為這會帶來大量的數據移動。

更改引擎

alter table oldboy engine = INNODB;
alter table oldboy engine = MyISAM;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM