數(shù)據(jù)庫(kù)mysql 只能使用innodb引擎
有一張交易記錄表,分表邏輯是按年月分 table_202308,table_202309.....
現(xiàn)在要對(duì)交易記錄進(jìn)行統(tǒng)計(jì),而且后臺(tái)也要查看記錄
數(shù)據(jù)查詢語(yǔ)句怎么優(yōu)化?
我能想到的是 寫(xiě)個(gè)for循環(huán)一次一次查......
一般這種場(chǎng)景都是使用etl將數(shù)據(jù)導(dǎo)入OLAP系統(tǒng)中進(jìn)行統(tǒng)計(jì)的;
自己如果做的話,就弄一個(gè)批處理定時(shí)任務(wù),分維度分顆粒度來(lái)進(jìn)行統(tǒng)計(jì),然后落一張表,業(yè)務(wù)的統(tǒng)計(jì)可以再在這張表上進(jìn)行二次統(tǒng)計(jì)
看數(shù)據(jù)大小, 可以重新弄一個(gè)數(shù)據(jù)庫(kù), 建立分區(qū)表, 把所有數(shù)據(jù)導(dǎo)入,根據(jù)數(shù)據(jù)要求來(lái)統(tǒng)計(jì). 如果數(shù)據(jù)實(shí)在太多, 使用阿里的rds來(lái)統(tǒng)計(jì), 雖然要花錢(qián), 效果很好.
如果對(duì)實(shí)效性沒(méi)有要求的比如不查今天數(shù)據(jù),可以在人少時(shí)用定時(shí)任務(wù)進(jìn)行業(yè)務(wù)統(tǒng)計(jì)然后落在一張表上,查詢都用這個(gè)表
先試試MySQL的分區(qū)吧,對(duì)業(yè)務(wù)是透明的,改動(dòng)非常小
分表的話,業(yè)務(wù)層太麻煩了
交易數(shù)據(jù)不變的情況下,可以把這些數(shù)據(jù)交給時(shí)序數(shù)據(jù)庫(kù),空間占用小,統(tǒng)計(jì)計(jì)算也很快。