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

對(duì)MySQL子查詢的簡(jiǎn)單改寫優(yōu)化

 更新時(shí)間:2015年05月08日 09:32:42   作者:羅龍九  
這篇文章主要介紹了對(duì)MySQL子查詢的簡(jiǎn)單改寫優(yōu)化,文中的小修改主要將子查詢改為關(guān)聯(lián)從而降低查詢時(shí)關(guān)聯(lián)的次數(shù),需要的朋友可以參考下

使用過oracle或者其他關(guān)系數(shù)據(jù)庫(kù)的DBA或者開發(fā)人員都有這樣的經(jīng)驗(yàn),在子查詢上都認(rèn)為數(shù)據(jù)庫(kù)已經(jīng)做過優(yōu)化,能夠很好的選擇驅(qū)動(dòng)表執(zhí)行,然后在把該經(jīng)驗(yàn)移植到mysql數(shù)據(jù)庫(kù)上,但是不幸的是,mysql在子查詢的處理上有可能會(huì)讓你大失所望,在我們的生產(chǎn)系統(tǒng)上就由于碰到了這個(gè)問題:

select i_id, sum(i_sell) as i_sell

from table_data

where i_id in (select i_id from table_data where Gmt_create >= '2011-10-07 00:00:00′)

group by i_id;

(備注:sql的業(yè)務(wù)邏輯可以打個(gè)比方:先查詢出10-07號(hào)新賣出的100本書,然后在查詢這新賣出的100本書在全年的銷量情況)。

這條sql之所以出現(xiàn)的性能問題在于mysql優(yōu)化器在處理子查詢的弱點(diǎn),mysql優(yōu)化器在處理子查詢的時(shí)候,會(huì)將將子查詢改寫。通常情況下,我們希望由內(nèi)到外,先完成子查詢的結(jié)果,然后在用子查詢來驅(qū)動(dòng)外查詢的表,完成查詢;但是mysql處理為將會(huì)先掃描外面表中的所有數(shù)據(jù),每條數(shù)據(jù)將會(huì)傳到子查詢中與子查詢關(guān)聯(lián),如果外表很大的話,那么性能上將會(huì)出現(xiàn)問題;

針對(duì)上面的查詢,由于table_data這張表的數(shù)據(jù)有70W的數(shù)據(jù),同時(shí)子查詢中的數(shù)據(jù)較多,有大量是重復(fù)的,這樣就需要關(guān)聯(lián)近70W次,大量的關(guān)聯(lián)導(dǎo)致這條sql執(zhí)行了幾個(gè)小時(shí)也沒有執(zhí)行完成,所以我們需要改寫sql:

SELECT t2.i_id, SUM(t2.i_sell) AS sold

FROM (SELECT distinct i_id FROM table_data

WHERE gmt_create >= '2011-10-07 00:00:00′) t1, table_data t2

WHERE t1.i_id = t2.i_id GROUP BY t2.i_id;

我們將子查詢改為了關(guān)聯(lián),同時(shí)在子查詢中加上distinct,減少t1關(guān)聯(lián)t2的次數(shù);

改造后,sql的執(zhí)行時(shí)間降到100ms以內(nèi)。

相關(guān)文章

  • MySQL定義異常和異常處理詳解

    MySQL定義異常和異常處理詳解

    這篇文章主要為大家詳細(xì)介紹了MySQL定義異常和異常處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 一文詳解如何徹底刪除舊版本mysql并安裝新版本

    一文詳解如何徹底刪除舊版本mysql并安裝新版本

    如果要重新安裝MySQL就必須將之前的MySQL進(jìn)行徹底的卸載,下面這篇文章主要給大家介紹了關(guān)于如何徹底刪除舊版本mysql并安裝新版本的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • MySQL使用GROUP?BY使用技巧和注意事項(xiàng)總結(jié)

    MySQL使用GROUP?BY使用技巧和注意事項(xiàng)總結(jié)

    GROUP?BY?子句是?在MySQL?中用于將查詢結(jié)果按照指定的列或表達(dá)式進(jìn)行分組的關(guān)鍵字,它通常與聚合函數(shù)一起使用,能夠?qū)γ總€(gè)分組進(jìn)行統(tǒng)計(jì)或計(jì)算,本文給大家總結(jié)了MySQL使用GROUP?BY使用技巧和注意事項(xiàng),需要的朋友可以參考下
    2024-05-05
  • win32安裝配置非安裝版的MySQL

    win32安裝配置非安裝版的MySQL

    當(dāng)前非安裝版是從MySQL.com下載來的v5.1.40;下載下來的是一個(gè)ZIP壓縮包,解壓到C:\MySQL5.1.40目錄,接下來,設(shè)置系統(tǒng)環(huán)境變量,好在CMD命令行下使用MySQL。
    2010-02-02
  • Mysql索引選擇以及優(yōu)化詳解

    Mysql索引選擇以及優(yōu)化詳解

    這篇文章主要給大家介紹了關(guān)于Mysql索引選擇以及優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MySQL 最基本的SQL語法/語句

    MySQL 最基本的SQL語法/語句

    MySQL 最基本的SQL語法/語句,使用mysql的朋友可以參考下。
    2011-09-09
  • MySQL派生表聯(lián)表查詢實(shí)戰(zhàn)過程

    MySQL派生表聯(lián)表查詢實(shí)戰(zhàn)過程

    派生表是查詢結(jié)果組成的虛擬表,派生表是在外部查詢的FROM子句中定義的,不需要手動(dòng)創(chuàng)建,下面這篇文章主要給大家介紹了關(guān)于MySQL派生表聯(lián)表查詢的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 從零開始搭建MySQL MMM架構(gòu)

    從零開始搭建MySQL MMM架構(gòu)

    這篇文章主要介紹了從零開始搭建MySQL MMM架構(gòu),本文講解了配置MySQL Relication、新建同步數(shù)據(jù)庫(kù)需要的用戶、同步主從數(shù)據(jù)庫(kù)、安裝MMM、配置MMM、啟動(dòng)MMM等問題,需要的朋友可以參考下
    2015-04-04
  • MySQL如何快速的創(chuàng)建千萬級(jí)測(cè)試數(shù)據(jù)

    MySQL如何快速的創(chuàng)建千萬級(jí)測(cè)試數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于MySQL如何快速的創(chuàng)建千萬級(jí)測(cè)試數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • MySQL使用觸發(fā)器如何實(shí)現(xiàn)CHECK檢查約束的功能

    MySQL使用觸發(fā)器如何實(shí)現(xiàn)CHECK檢查約束的功能

    這篇文章主要介紹了MySQL使用觸發(fā)器如何實(shí)現(xiàn)CHECK檢查約束的功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論

沭阳县| 晴隆县| 抚州市| 通河县| 屏山县| 榕江县| 武隆县| 大同县| 穆棱市| 清丰县| 巩义市| 平乐县| 左权县| 锡林浩特市| 札达县| 交口县| 东平县| 安义县| 双峰县| 唐海县| 鹤山市| 客服| 车险| 芦山县| 绥棱县| 武隆县| 易门县| 扶余县| 江达县| 南涧| 文成县| 岱山县| 屏山县| 新余市| 广西| 阿合奇县| 抚顺县| 江华| 吉隆县| 苍山县| 大新县|