最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年02月05日 10:00:44   作者:陳先生灬  
這篇文章主要給大家介紹了關(guān)于mysql聚合統(tǒng)計(jì)數(shù)據(jù)查詢緩慢的優(yōu)化方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

寫在前面

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

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

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

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

sql聚合函數(shù)

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

常見的有以下方法

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

演示幾個(gè)簡(jiǎn)單使用的sql語句:

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

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

查詢u_id為100的訂單消費(fèi)總和

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

查詢銷量最高的商品

select max(sell_num) from goods

統(tǒng)計(jì)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í),訂單表的總數(shù)是1億條。并且此條sql運(yùn)行很慢,我們應(yīng)該如何排查優(yōu)化?

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

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

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

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

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

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

提前預(yù)算

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

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

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

定時(shí)落地

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

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

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

總結(jié)

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

聚合函數(shù)謹(jǐn)慎用 最好不用,因?yàn)槲覀儫o法預(yù)算以后的數(shù)據(jù)量需要掃描多少行數(shù)據(jù)來計(jì)算

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

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

相關(guān)文章

  • MySQL 視圖(View)原理解析

    MySQL 視圖(View)原理解析

    本篇重點(diǎn)講述視圖是如何實(shí)現(xiàn)的,以及視圖如何和查詢優(yōu)化器交互,從而我們可以根據(jù)這些知識(shí)了解如何通過視圖提高性能。
    2021-05-05
  • MySQL 觸發(fā)器(TRIGGER)的具體使用

    MySQL 觸發(fā)器(TRIGGER)的具體使用

    本文主要介紹了MySQL 觸發(fā)器(TRIGGER)的具體使用,包含INSERT 觸發(fā)器,UPDATE觸發(fā)器和DELETE觸發(fā)器這三種,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • MySql視圖觸發(fā)器存儲(chǔ)過程詳解

    MySql視圖觸發(fā)器存儲(chǔ)過程詳解

    這篇文章主要介紹了MySql視圖觸發(fā)器存儲(chǔ)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • mysql實(shí)現(xiàn)定時(shí)備份的詳細(xì)圖文教程

    mysql實(shí)現(xiàn)定時(shí)備份的詳細(xì)圖文教程

    這篇文章主要給大家介紹了關(guān)于mysql實(shí)現(xiàn)定時(shí)備份的詳細(xì)圖文教程,我們都知道數(shù)據(jù)是無價(jià),如果不對(duì)數(shù)據(jù)進(jìn)行備份,相當(dāng)是讓數(shù)據(jù)在裸跑,一旦服務(wù)器出問題,只有哭的份了,需要的朋友可以參考下
    2023-07-07
  • mysql中向表中某字段追加字符串的方法

    mysql中向表中某字段追加字符串的方法

    mysql中向表中某字段追加字符串的方法...
    2007-03-03
  • Mysql的row_number函數(shù)使用介紹

    Mysql的row_number函數(shù)使用介紹

    這篇文章主要為大家介紹了Mysql的row_number函數(shù)使用原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • asp采用ODBC接口訪問MySQL的方法

    asp采用ODBC接口訪問MySQL的方法

    asp采用ODBC接口訪問MySQL的方法...
    2007-07-07
  • Mysql?數(shù)據(jù)庫結(jié)構(gòu)及索引類型

    Mysql?數(shù)據(jù)庫結(jié)構(gòu)及索引類型

    這篇文章主要介紹了Mysql?數(shù)據(jù)庫結(jié)構(gòu)及索引類型,數(shù)據(jù)庫索引是?mysql?數(shù)據(jù)庫中重要的組成部分,是數(shù)據(jù)庫查詢數(shù)據(jù)速度提升的關(guān)鍵,本文將介紹數(shù)據(jù)庫索引的一些內(nèi)容,下文更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • mysql安裝忘記初始密碼簡(jiǎn)單有效的解決方法

    mysql安裝忘記初始密碼簡(jiǎn)單有效的解決方法

    在本篇文章里小編給大家整理的是一篇關(guān)于mysql安裝忘記初始密碼簡(jiǎn)單有效的解決方法,有需要的朋友們參考學(xué)習(xí)下。
    2020-01-01
  • macOS Sierra安裝Apache2.4+PHP7.0+MySQL5.7.16

    macOS Sierra安裝Apache2.4+PHP7.0+MySQL5.7.16

    這篇文章主要為大家詳細(xì)介紹了macOS Sierra安裝Apache2.4+PHP7.0+MySQL5.7.16的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評(píng)論

盐城市| 宝丰县| 乌鲁木齐县| 常州市| 威宁| 宁德市| 陆良县| 扎兰屯市| 曲松县| 承德县| 石嘴山市| 桦甸市| 开江县| 江永县| 泸溪县| 施秉县| 佛山市| 民乐县| 黄大仙区| 北川| 阳春市| 嵊泗县| 海丰县| 安陆市| 绥中县| 宜宾市| 乐陵市| 玛纳斯县| 宁武县| 洛隆县| 固安县| 阳江市| 江源县| 黄浦区| 郓城县| 淳安县| 德清县| 松滋市| 永仁县| 彝良县| 汉阴县|