mysql千萬級數(shù)據(jù)大表該如何優(yōu)化?
更新時間:2011年08月06日 23:12:55 作者:
如何設(shè)計或優(yōu)化千萬級別的大表?此外無其他信息,個人覺得這個話題有點范,就只好簡單說下該如何做,對于一個存儲設(shè)計,必須考慮業(yè)務(wù)特點,收集的信息如下
1.數(shù)據(jù)的容量:1-3年內(nèi)會大概多少條數(shù)據(jù),每條數(shù)據(jù)大概多少字節(jié);
2.數(shù)據(jù)項:是否有大字段,那些字段的值是否經(jīng)常被更新;
3.數(shù)據(jù)查詢SQL條件:哪些數(shù)據(jù)項的列名稱經(jīng)常出現(xiàn)在WHERE、GROUP BY、ORDER BY子句中等;
4.數(shù)據(jù)更新類SQL條件:有多少列經(jīng)常出現(xiàn)UPDATE或DELETE 的WHERE子句中;
5.SQL量的統(tǒng)計比,如:SELECT:UPDATE+DELETE:INSERT=多少?
6.預(yù)計大表及相關(guān)聯(lián)的SQL,每天總的執(zhí)行量在何數(shù)量級?
7.表中的數(shù)據(jù):更新為主的業(yè)務(wù) 還是 查詢?yōu)橹鞯臉I(yè)務(wù)
8.打算采用什么數(shù)據(jù)庫物理服務(wù)器,以及數(shù)據(jù)庫服務(wù)器架構(gòu)?
9.并發(fā)如何?
10.存儲引擎選擇InnoDB還是MyISAM?
大致明白以上10個問題,至于如何設(shè)計此類的大表,應(yīng)該什么都清楚了!
至于優(yōu)化若是指創(chuàng)建好的表,不能變動表結(jié)構(gòu)的話,那建議InnoDB引擎,多利用點內(nèi)存,減輕磁盤IO負(fù)載,因為IO往往是數(shù)據(jù)庫服務(wù)器的瓶頸
另外對優(yōu)化索引結(jié)構(gòu)去解決性能問題的話,建議優(yōu)先考慮修改類SQL語句,使他們更快些,不得已只靠索引組織結(jié)構(gòu)的方式,當(dāng)然此話前提是,
索引已經(jīng)創(chuàng)建的非常好,若是讀為主,可以考慮打開query_cache,
以及調(diào)整一些參數(shù)值:sort_buffer_size,read_buffer_size,read_rnd_buffer_size,join_buffer_size
其他人建議:
1. 索引, 避免掃描,基于主鍵的查找,上億數(shù)據(jù)也是很快的;
2. 反范式化設(shè)計,以空間換時間,避免join,有些join操作可以在用代碼實現(xiàn),沒必要用數(shù)據(jù)庫來實現(xiàn);
2.數(shù)據(jù)項:是否有大字段,那些字段的值是否經(jīng)常被更新;
3.數(shù)據(jù)查詢SQL條件:哪些數(shù)據(jù)項的列名稱經(jīng)常出現(xiàn)在WHERE、GROUP BY、ORDER BY子句中等;
4.數(shù)據(jù)更新類SQL條件:有多少列經(jīng)常出現(xiàn)UPDATE或DELETE 的WHERE子句中;
5.SQL量的統(tǒng)計比,如:SELECT:UPDATE+DELETE:INSERT=多少?
6.預(yù)計大表及相關(guān)聯(lián)的SQL,每天總的執(zhí)行量在何數(shù)量級?
7.表中的數(shù)據(jù):更新為主的業(yè)務(wù) 還是 查詢?yōu)橹鞯臉I(yè)務(wù)
8.打算采用什么數(shù)據(jù)庫物理服務(wù)器,以及數(shù)據(jù)庫服務(wù)器架構(gòu)?
9.并發(fā)如何?
10.存儲引擎選擇InnoDB還是MyISAM?
大致明白以上10個問題,至于如何設(shè)計此類的大表,應(yīng)該什么都清楚了!
至于優(yōu)化若是指創(chuàng)建好的表,不能變動表結(jié)構(gòu)的話,那建議InnoDB引擎,多利用點內(nèi)存,減輕磁盤IO負(fù)載,因為IO往往是數(shù)據(jù)庫服務(wù)器的瓶頸
另外對優(yōu)化索引結(jié)構(gòu)去解決性能問題的話,建議優(yōu)先考慮修改類SQL語句,使他們更快些,不得已只靠索引組織結(jié)構(gòu)的方式,當(dāng)然此話前提是,
索引已經(jīng)創(chuàng)建的非常好,若是讀為主,可以考慮打開query_cache,
以及調(diào)整一些參數(shù)值:sort_buffer_size,read_buffer_size,read_rnd_buffer_size,join_buffer_size
其他人建議:
1. 索引, 避免掃描,基于主鍵的查找,上億數(shù)據(jù)也是很快的;
2. 反范式化設(shè)計,以空間換時間,避免join,有些join操作可以在用代碼實現(xiàn),沒必要用數(shù)據(jù)庫來實現(xiàn);
相關(guān)文章
MySQL實現(xiàn)批量插入測試數(shù)據(jù)的方式總結(jié)
在開發(fā)過程中經(jīng)常需要一些測試數(shù)據(jù),?這個時候如果手敲的話,?十行二十行還好,?多了就很死亡了,?接下來介紹兩種常用的MySQL測試數(shù)據(jù)批量生成方式,希望對大家有所幫助2023-05-05
MySQL拋出Incorrect string value異常分析
從上至下統(tǒng)一用上UTF-8就高枕無憂,今天還是遇到字符的異常,本文將介紹解決方法2012-11-11
MySQL配置文件my.cnf參數(shù)優(yōu)化和中文詳解
這篇文章主要介紹了MySQL配置文件my.cnf參數(shù)優(yōu)化和中文詳解,非常詳細(xì)的用中文注釋了各個參數(shù)的作用以及建議值,需要的朋友可以參考下2014-03-03

