mysql数据库存储引擎选择_MySQL数据库性能优化之存储引擎选择
的存儲引擎可能是所有關系型產品中最具有特色的了,不僅可以同時使用多種存儲引擎,而且每種存儲引擎和MySQL之間使用插件方式這種非常松的耦合關系。
Eb$d8lR;Tw0由于各存儲引擎功能特性差異較大,這篇主要是介紹如何來選擇合適的存儲引擎來應對不同的業務場景。(Ks
I&@z5]051Testing軟件測試網1Wgon?L3o"W]NJ['P%Yb0
P!pv"a VTL0Wr:nz:YHsUd051Testing軟件測試網:r%h?#V7{
51Testing軟件測試網Yo_-R"UT:{
Q4xV3La051Testing軟件測試網p.i Qy[GI~Q{
/_BK$ND051Testing軟件測試網D1wx{3aa5s-a6G#X
NOjNSG^^0MyISAM51Testing軟件測試網]c
C\4vq|51Testing軟件測試網:q
R)?Y&gy5Q@+lgL
1、特性r e&m$NX:OH_Y0
\tz3]J
LCI0不支持事務:MyISAM存儲引擎不支持事務,所以對事務有要求的業務場景不能使用"Y kK#?K"q-X0
(n6`8e?Ch0表級鎖定:其鎖定機制是表級索引,這雖然可以讓鎖定的實現成本很小但是也同時大大降低了其并發性能51Testing軟件測試網DT0S;ihq
8OqQGb9L(~3[1Z(o0讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,MyISAM還會在讀取的時候阻塞寫入,但讀本身并不會阻塞另外的讀#zs4p:z2G8v+\f?u0
s)tXc1g:lT*JC0只會緩存索引:MyISAM可以通過key_buffer緩存以大大提高訪問性能減少磁盤IO,但是這個緩存區只會緩存索引,而不會緩存數據]A!y8Td0
9A1JF}j02、適用場景{!Xi$Lx9A~L9x1~~6f7w051Testing軟件測試網+g+asgUF
不需要事務支持(不支持)*XAq#v/ZV%|051Testing軟件測試網Ly0RikK
并發相對較低(鎖定機制問題)/SNDzCC8~*x0
0u}OyT0數據修改相對較少(阻塞問題)51Testing軟件測試網^XRdGW\
V-@DO5Di0以讀為主51Testing軟件測試網AC#BLnq$A\Zx
3EbUv(CON'mU0數據一致性要求不是非常高`[i#j+y`'N*ZGD051Testing軟件測試網gT,h@0S8Rz
3、最佳實踐51Testing軟件測試網Zy v ` n
k Y2C"m~Dp$x0盡量索引(緩存機制)k3qNb,E7],Se#J9Q051Testing軟件測試網vY2Q"B]Xn7F$PE
調整讀寫優先級,根據實際需求確保重要操作更優先$~5Q2i~cs\P051Testing軟件測試網7F:Q#uj-BK/U/A
啟用延遲插入改善大批量寫入性能51Testing軟件測試網9eXi
]w(\%|Tq]
W` `nh#Q5j@Y0盡量順序操作讓insert數據都寫入到尾部,減少阻塞I1?g#[M051Testing軟件測試網f"ce4u~{d;R
分解大的操作,降低單個操作的阻塞時間51Testing軟件測試網^5o]"|IlM&t3C51Testing軟件測試網m,[(xp8L1s
降低并發數,某些高并發場景通過應用來進行排隊機制51Testing軟件測試網D+tP Tg$t51Testing軟件測試網IFR?"JQ5j)NC
對于相對靜態的數據,充分利用Query Cache可以極大的提高訪問效率51Testing軟件測試網-p2q
\6}-Y O"l51Testing軟件測試網 WT.gY
rsl3l5bJ
MyISAM的Count只有在全表掃描的時候特別高效,帶有其他條件的count都需要進行實際的數據訪問51Testing軟件測試網TdB$R!A*u5_X51Testing軟件測試網/\/dc#c'|k]
InnoDB51Testing軟件測試網7r F%XE9NJc-~Ru
v8E3U6lS Y8x01、特性51Testing軟件測試網)nc+m'PB;Ex
~ei.i iy"k4bX |0具有較好的事務支持:支持4個事務隔離級別,支持多版本讀51Testing軟件測試網7w"Jh6Vr51Testing軟件測試網$B\(m;W)@)Lz4j
行級鎖定:通過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響51Testing軟件測試網.?s,R"V$X0cn-l
$iQj4FV'Awc%[$dD0讀寫阻塞與事務隔離級別相關51Testing軟件測試網)v;af+T*U!H4J\
s51Testing軟件測試網+HcE Iy
具有非常高效的緩存特性:能緩存索引,也能緩存數據gNen*?ojgYs0SF051Testing軟件測試網cZav&i.vam
整個表和主鍵以Cluster方式存儲,組成一顆平衡樹51Testing軟件測試網.?bq!W,b-B
&e'A7S!d-|)S{A7^/F0所有Secondary Index都會保存主鍵信息@,l-`0[-XV6W7u0
jF(Se
T\-e*H02、適用場景51Testing軟件測試網$_Szs};d _!ph51Testing軟件測試網M+b` e^kxl
需要事務支持(具有較好的事務特性)#pE1BU0[2d051Testing軟件測試網u8?K8ay
O-l,\
行級鎖定對高并發有很好的適應能力,但需要確保查詢是通過索引完成,RgRu;Q0
*Tz7LUr-F0數據更新較為頻繁的場景hw!p/j2C Lh:h051Testing軟件測試網3}:y_C-iP
數據一致性要求較高;LyA(GC:v1{Blp3c0
&vv8[I_Ne,F6{K
h0硬件設備內存較大,可以利用InnoDB較好的緩存能力來提高內存利用率,盡可能減少磁盤 IOp \m4VR!C6tm051Testing軟件測試網9wC(p5ooG:d
3、最佳實踐51Testing軟件測試網&a{r)u-S6v51Testing軟件測試網dd%_8E0D!ed5AD
主鍵盡可能小,避免給Secondary index帶來過大的空間負擔!@'Mx5EB
KU(tvw,M(b051Testing軟件測試網_G9?|:X4o0|:ox
避免全表掃描,因為會使用表鎖%m d9M;|H J.wu@051Testing軟件測試網@QwCH z D
盡可能緩存所有的索引和數據,提高響應速度e9p9p9Kxn!P$bw0
*W6a'k1ms6\0m @0在大批量小插入的時候,盡量自己控制事務而不要使用autocommit自動提交51Testing軟件測試網[iD#bg51Testing軟件測試網a|*zS ~W9[g~
合理設置innodb_flush_log_at_trx_commit參數值,不要過度追求安全性51Testing軟件測試網4m_:Ka%Q1RSr!P
BmP'[U,}8k lh0避免主鍵更新,因為這會帶來大量的數據移動/{p^gQd^;B)M051Testing軟件測試網5H F5G0G(T
NDBClusterc8tE_g|#T!gE#J2_051Testing軟件測試網!GK-K7E0R r5W8?
1、特性51Testing軟件測試網S,uT#t8lB)cSI%r:A51Testing軟件測試網4Z$U)q7Q4_jQ
分布式:分布式存儲引擎,可以由多個NDBCluster存儲引擎組成集群分別存放整體數據的一部分-z UC$}/C.oa${!a0
2O]V;RC0支持事務:和Innodb一樣,支持事務:hA9jwcT
Uf0
;Hws/}t.lP:h0可與mysqld不在一臺主機:可以和mysqld分開存在于獨立的主機上,然后通過網絡和mysqld通信交互51Testing軟件測試網f*lFi/m1X51Testing軟件測試網a${X,{#D!H;x8ml
內存需求量巨大:新版本索引以及被索引的數據必須存放在內存中,老版本所有數據和索引必須存在與內存中51Testing軟件測試網~JB;|V"x_7I51Testing軟件測試網\WgI!Z#l
2、適用場景51Testing軟件測試網ND,K$T+l2~{!D\51Testing軟件測試網Xm}Ig`)jm/G
具有非常高的并發需求51Testing軟件測試網OP}mxM1y@\
t'y[-`R3Y'ek0對單個請求的響應并不是非常的critical51Testing軟件測試網FG_t0V$J'v51Testing軟件測試網%h^"S9[,H ]c9JKQ
查詢簡單,過濾條件較為固定,每次請求數據量較少,又不希望自己進行水平Sharding51Testing軟件測試網7eL#XXFQ/?51Testing軟件測試網,q3Ui9u
Of:p
3、最佳實踐51Testing軟件測試網:X$Xx3f5~3A R;u
&w$_ghMtpo0盡可能讓查詢簡單,避免數據的跨節點傳輸HOxn1`$?P0
;_I O3KAB.Qj0盡可能滿足SQL節點的計算性能,大一點的集群SQL節點會明顯多余Data節點JFb8]AB051Testing軟件測試網q-D1?;f
m!h
在各節點之間盡可能使用萬兆網絡環境互聯,以減少數據在網絡層傳輸過程中的延時C:jYeum,B!kD9p051Testing軟件測試網F-ZN/^uAig9Z
注:以上三個存儲引擎是目前相對主流的存儲引擎,還有其他類似如:Memory,Merge,CSV,Archive等存儲引擎的使用場景都相對較少,這里就不一一分析了,如果有朋友感興趣,后面再補充吧。51Testing軟件測試網uZ-k5zM4ZV~
總結
以上是生活随笔為你收集整理的mysql数据库存储引擎选择_MySQL数据库性能优化之存储引擎选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1404公里摩托车要开多久
- 下一篇: mysql用索性的好处_MySql索引的