mysql優(yōu)化 - mysql 單表優(yōu)化求方案
問(wèn)題描述
背景數(shù)據(jù)量:數(shù)據(jù)量大約3000w+ ,數(shù)據(jù)大小10g,索引30g,如下圖。
需求:需要比較多的group by 操作和全量數(shù)據(jù)操作。
問(wèn)題:各種group by 特別慢。
已嘗試方案:1:嘗試放es,但操作非常不方便。
2:數(shù)據(jù)表分表,成本比較大,從時(shí)間和業(yè)務(wù)角度都沒(méi)有比較好的分表方案。
3:讀寫(xiě)分離,分離之后效果提升不大。
4:在嘗試postgresql,但需要業(yè)務(wù)較大的變動(dòng),暫未試試。
求存儲(chǔ)或者優(yōu)化方案,最好是存儲(chǔ)在mysql上優(yōu)化,其他存儲(chǔ)介質(zhì)也可以。
問(wèn)題解答
回答1:大表優(yōu)化無(wú)非就建索引、數(shù)據(jù)水平切分、豎直切分,該用的你都測(cè)了,沒(méi)見(jiàn)你把表結(jié)構(gòu)和索引截出來(lái)也不好說(shuō),索引不要建太多。建議是從業(yè)務(wù)層面上去優(yōu)化,看是否需要分頁(yè),即使是全量數(shù)據(jù)操作,用預(yù)統(tǒng)計(jì)是否合適,是否需要冗余字段來(lái)讓group by更充分利用索引。
回答2:group by 優(yōu)化方案Loose Index Scan和Tight Index Scan 。中文叫做松散索引掃描和緊湊索引掃描具體可以參考官方文檔http://dev.mysql.com/doc/refm...
回答3:sphinx 試試?
回答4:postgresql對(duì)多表關(guān)聯(lián)和count支持速度怎樣?測(cè)試的mysql多表關(guān)聯(lián),慢!索引優(yōu)化確實(shí)很關(guān)鍵;還有就是多表關(guān)聯(lián)后的視圖,排序、count分頁(yè)等速度更加難以想象。這里想回問(wèn)下你們?cè)趺唇鉀Q多表關(guān)聯(lián)、視圖、分頁(yè)的問(wèn)題,看樣索引是真沒(méi)少建啊。
回答5:該用的你都測(cè)試了,全量數(shù)據(jù)操作我也沒(méi)想出來(lái)什么好的辦法了。對(duì)于group by操作,如果是固定的sql(業(yè)務(wù)需要),
1)可以考慮用存儲(chǔ)過(guò)程將常用sql的結(jié)果定時(shí)生成新表的數(shù)據(jù)。2)將常用的sql字段分拆,再優(yōu)化
相關(guān)文章:
1. javascript - vue 移動(dòng)端的input 數(shù)字輸入優(yōu)化2. java - mongodb分片集群下,count和聚合統(tǒng)計(jì)問(wèn)題3. java - 自己制作一個(gè)視頻播放器,遇到問(wèn)題,用的是內(nèi)置surfaceview類(lèi),具體看代碼!4. android - java 泛型不支持?jǐn)?shù)組,那么RxJava的Map集合有什么方便的手段可以定義獲得一串共同父類(lèi)集合數(shù)據(jù)呢?5. 服務(wù)器端 - 采用nginx做web服務(wù)器,C++開(kāi)發(fā)應(yīng)用程序 出現(xiàn)拒絕連接請(qǐng)求?6. 為什么我ping不通我的docker容器呢???7. 關(guān)于docker下的nginx壓力測(cè)試8. python - pandas按照列A和列B分組,將列C求平均數(shù),怎樣才能生成一個(gè)列A,B,C的dataframe9. javascript - 有什么兼容性比較好的辦法來(lái)判斷瀏覽器窗口的類(lèi)型?10. java - 靜態(tài)屬性中的賦值和靜態(tài)代碼塊中的賦值有什么區(qū)別?
