人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

mysql聚合統(tǒng)計數(shù)據(jù)查詢緩慢的優(yōu)化方法

發(fā)布日期:2022-02-20 08:36 | 文章來源:CSDN

寫在前面

在我們?nèi)粘2僮鲾?shù)據(jù)庫的時候,比如訂單表、訪問記錄表、商品表的時候。

經(jīng)常會處理計算數(shù)據(jù)列總和、數(shù)據(jù)行數(shù)等統(tǒng)計問題。

隨著業(yè)務(wù)發(fā)展,這些表會越來越大,如果處理不當(dāng),查詢統(tǒng)計的速度也會越來越慢,直到業(yè)務(wù)無法再容忍。

所以,我們需要先了解、思考這些場景知識點,在設(shè)計之初,便預(yù)留一些優(yōu)化空間支撐業(yè)務(wù)發(fā)展。

sql聚合函數(shù)

在mysql等數(shù)據(jù)中,都會支持聚合函數(shù),方便我們計算數(shù)據(jù)。

常見的有以下方法

取平均值 AVG()
求和 SUM()
最大值 MAX()
最小值 MIN()
行數(shù) COUNT()

演示幾個簡單使用的sql語句:

查詢u_id為100的訂單總數(shù)

select count(id) from orders where u_id = 100;

查詢u_id為100的訂單消費總和

select sum(order_amount) from orders where u_id = 100;

查詢銷量最高的商品

select max(sell_num) from goods

統(tǒng)計7月份的訂單數(shù)量、金額總和

select count(id) as count, sum(order_amount) as total_amount 
from orders where order_date between 20190701 and 20190731 and is_pay = 1

如果此時,訂單表的總數(shù)是1億條。并且此條sql運行很慢,我們應(yīng)該如何排查優(yōu)化?

有的同學(xué)會說了:行數(shù)多,在日期字段上加 索引,這樣子篩選就很快了。

總數(shù)1億條,假設(shè)7月份的訂單有1000萬條,加了索引的時候,篩選速度自然會提升不少。但是此時我們的問題真的解決了嗎?

在這種聚合函數(shù)中,結(jié)果需要 遍歷每一條 數(shù)據(jù)來計算,比如我們統(tǒng)計訂單總和,就需要每一行都讀取訂單金額,然后加起來。

也就是說在這條統(tǒng)計sql中,需要先從1億數(shù)據(jù)中篩選1000萬條數(shù)據(jù),然后再遍歷這些數(shù)據(jù)來計算。 此時就會非常慢了。

增加索引并不能解決聚合函數(shù)統(tǒng)計慢的問題

優(yōu)化聚合統(tǒng)計的方案

提前預(yù)算

建立 統(tǒng)計數(shù)據(jù)表,以日期區(qū)分,如:20190801一天,銷售了多少訂單、金額等等數(shù)據(jù)。
當(dāng)訂單產(chǎn)生(支付完成后 可統(tǒng)計數(shù)據(jù))時,便在統(tǒng)計數(shù)據(jù)表中對應(yīng)的日期增加金額、數(shù)量。

需要注意的是,如果有退款等場景會影響減少數(shù)據(jù),記得也相應(yīng)地做操作處理

當(dāng)我們需要統(tǒng)計8月份的數(shù)據(jù)時候,則只需要遍歷計算這一個月的三十來行數(shù)據(jù)。

定時落地

我們可以使用easyswoole、計劃任務(wù)等。來定時(比如每20分鐘一次)計算總和,然后更新到 統(tǒng)計數(shù)據(jù)表 中。

優(yōu)點:做的處理比較少,也無需改動退款操作等api,只需要依賴 原訂單 表的數(shù)據(jù),定時統(tǒng)計、刷新統(tǒng)計數(shù)據(jù)。

需要注意的是,根據(jù)不同的訂單熱度,來設(shè)置不同的落地頻率,比如 一周內(nèi)的數(shù)據(jù)變化幾率比較大,可能20分鐘落地。而一年前的數(shù)據(jù)則變化幾率很小,可以選擇某天同步一次,甚至確保不會變動時,則不再刷新。

總結(jié)

索引并不能解決統(tǒng)計聚合數(shù)據(jù)慢的sql語句問題

聚合函數(shù)謹(jǐn)慎用 最好不用,因為我們無法預(yù)算以后的數(shù)據(jù)量需要掃描多少行數(shù)據(jù)來計算

優(yōu)化方案離不開統(tǒng)計表,都需要按一定的周期儲存運算好的統(tǒng)計數(shù)據(jù)

到此這篇關(guān)于mysql聚合統(tǒng)計數(shù)據(jù)查詢緩慢的文章就介紹到這了,更多相關(guān)mysql聚合統(tǒng)計數(shù)據(jù)查詢緩慢內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

美國服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部