mysql千萬(wàn)級(jí)數(shù)據(jù)大表該如何優(yōu)化?
更新時(shí)間:2011年08月06日 23:12:55 作者:
如何設(shè)計(jì)或優(yōu)化千萬(wàn)級(jí)別的大表?此外無(wú)其他信息,個(gè)人覺(jué)得這個(gè)話題有點(diǎn)范,就只好簡(jiǎn)單說(shuō)下該如何做,對(duì)于一個(gè)存儲(chǔ)設(shè)計(jì),必須考慮業(yè)務(wù)特點(diǎn),收集的信息如下
1.數(shù)據(jù)的容量:1-3年內(nèi)會(huì)大概多少條數(shù)據(jù),每條數(shù)據(jù)大概多少字節(jié);
2.數(shù)據(jù)項(xiàng):是否有大字段,那些字段的值是否經(jīng)常被更新;
3.數(shù)據(jù)查詢SQL條件:哪些數(shù)據(jù)項(xiàng)的列名稱經(jīng)常出現(xiàn)在WHERE、GROUP BY、ORDER BY子句中等;
4.數(shù)據(jù)更新類SQL條件:有多少列經(jīng)常出現(xiàn)UPDATE或DELETE 的WHERE子句中;
5.SQL量的統(tǒng)計(jì)比,如:SELECT:UPDATE+DELETE:INSERT=多少?
6.預(yù)計(jì)大表及相關(guān)聯(lián)的SQL,每天總的執(zhí)行量在何數(shù)量級(jí)?
7.表中的數(shù)據(jù):更新為主的業(yè)務(wù) 還是 查詢?yōu)橹鞯臉I(yè)務(wù)
8.打算采用什么數(shù)據(jù)庫(kù)物理服務(wù)器,以及數(shù)據(jù)庫(kù)服務(wù)器架構(gòu)?
9.并發(fā)如何?
10.存儲(chǔ)引擎選擇InnoDB還是MyISAM?
大致明白以上10個(gè)問(wèn)題,至于如何設(shè)計(jì)此類的大表,應(yīng)該什么都清楚了!
至于優(yōu)化若是指創(chuàng)建好的表,不能變動(dòng)表結(jié)構(gòu)的話,那建議InnoDB引擎,多利用點(diǎn)內(nèi)存,減輕磁盤(pán)IO負(fù)載,因?yàn)镮O往往是數(shù)據(jù)庫(kù)服務(wù)器的瓶頸
另外對(duì)優(yōu)化索引結(jié)構(gòu)去解決性能問(wèn)題的話,建議優(yōu)先考慮修改類SQL語(yǔ)句,使他們更快些,不得已只靠索引組織結(jié)構(gòu)的方式,當(dāng)然此話前提是,
索引已經(jīng)創(chuàng)建的非常好,若是讀為主,可以考慮打開(kāi)query_cache,
以及調(diào)整一些參數(shù)值:sort_buffer_size,read_buffer_size,read_rnd_buffer_size,join_buffer_size
其他人建議:
1. 索引, 避免掃描,基于主鍵的查找,上億數(shù)據(jù)也是很快的;
2. 反范式化設(shè)計(jì),以空間換時(shí)間,避免join,有些join操作可以在用代碼實(shí)現(xiàn),沒(méi)必要用數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn);
2.數(shù)據(jù)項(xiàng):是否有大字段,那些字段的值是否經(jīng)常被更新;
3.數(shù)據(jù)查詢SQL條件:哪些數(shù)據(jù)項(xiàng)的列名稱經(jīng)常出現(xiàn)在WHERE、GROUP BY、ORDER BY子句中等;
4.數(shù)據(jù)更新類SQL條件:有多少列經(jīng)常出現(xiàn)UPDATE或DELETE 的WHERE子句中;
5.SQL量的統(tǒng)計(jì)比,如:SELECT:UPDATE+DELETE:INSERT=多少?
6.預(yù)計(jì)大表及相關(guān)聯(lián)的SQL,每天總的執(zhí)行量在何數(shù)量級(jí)?
7.表中的數(shù)據(jù):更新為主的業(yè)務(wù) 還是 查詢?yōu)橹鞯臉I(yè)務(wù)
8.打算采用什么數(shù)據(jù)庫(kù)物理服務(wù)器,以及數(shù)據(jù)庫(kù)服務(wù)器架構(gòu)?
9.并發(fā)如何?
10.存儲(chǔ)引擎選擇InnoDB還是MyISAM?
大致明白以上10個(gè)問(wèn)題,至于如何設(shè)計(jì)此類的大表,應(yīng)該什么都清楚了!
至于優(yōu)化若是指創(chuàng)建好的表,不能變動(dòng)表結(jié)構(gòu)的話,那建議InnoDB引擎,多利用點(diǎn)內(nèi)存,減輕磁盤(pán)IO負(fù)載,因?yàn)镮O往往是數(shù)據(jù)庫(kù)服務(wù)器的瓶頸
另外對(duì)優(yōu)化索引結(jié)構(gòu)去解決性能問(wèn)題的話,建議優(yōu)先考慮修改類SQL語(yǔ)句,使他們更快些,不得已只靠索引組織結(jié)構(gòu)的方式,當(dāng)然此話前提是,
索引已經(jīng)創(chuàng)建的非常好,若是讀為主,可以考慮打開(kāi)query_cache,
以及調(diào)整一些參數(shù)值:sort_buffer_size,read_buffer_size,read_rnd_buffer_size,join_buffer_size
其他人建議:
1. 索引, 避免掃描,基于主鍵的查找,上億數(shù)據(jù)也是很快的;
2. 反范式化設(shè)計(jì),以空間換時(shí)間,避免join,有些join操作可以在用代碼實(shí)現(xiàn),沒(méi)必要用數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn);
相關(guān)文章
mysql實(shí)現(xiàn)將字符串字段轉(zhuǎn)為數(shù)字排序或比大小
這篇文章主要介紹了mysql實(shí)現(xiàn)將字符串字段轉(zhuǎn)為數(shù)字排序或比大小,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06linux下導(dǎo)入、導(dǎo)出mysql數(shù)據(jù)庫(kù)命令的實(shí)現(xiàn)方法
下面小編就為大家分享一篇linux下導(dǎo)入、導(dǎo)出mysql數(shù)據(jù)庫(kù)命令的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12MYSQL數(shù)據(jù)庫(kù)主從同步設(shè)置的實(shí)現(xiàn)步驟
本文主要介紹了MYSQL數(shù)據(jù)庫(kù)主從同步設(shè)置的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03基于sqlalchemy對(duì)mysql實(shí)現(xiàn)增刪改查操作
這篇文章主要介紹了基于sqlalchemy對(duì)mysql實(shí)現(xiàn)增刪改查操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06mysql中索引使用不當(dāng)速度比沒(méi)加索引還慢的測(cè)試
mysql的索引使用不當(dāng)速度比沒(méi)加索引還慢,我們舉個(gè)例子來(lái)解釋一下。2011-08-08