亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

對(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ù),需要的朋友可以參考下

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

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

    MySQL數(shù)據(jù)庫(kù)事務(wù)原理及應(yīng)用

    MySQL數(shù)據(jù)庫(kù)事務(wù)是指一組數(shù)據(jù)庫(kù)操作,要么全部執(zhí)行成功,要么全部回滾。事務(wù)可以確保數(shù)據(jù)的一致性和完整性,避免了多個(gè)用戶同時(shí)對(duì)同一數(shù)據(jù)進(jìn)行修改所帶來(lái)的問(wèn)題。MySQL通過(guò)事務(wù)日志記錄事務(wù)的操作,支持事務(wù)的回滾和提交等操作
    2023-04-04
  • mysql導(dǎo)出查詢結(jié)果到csv的實(shí)現(xiàn)方法

    mysql導(dǎo)出查詢結(jié)果到csv的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇mysql導(dǎo)出查詢結(jié)果到csv的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • 分享Mysql命令大全

    分享Mysql命令大全

    本文給大家介紹mysql命令大全相關(guān)知識(shí),涉及到mysql命令相關(guān)知識(shí),對(duì)此感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • 手把手教你用SQL獲取年、月、周幾、日、時(shí)

    手把手教你用SQL獲取年、月、周幾、日、時(shí)

    時(shí)間處理是我們?nèi)粘i_(kāi)發(fā)中經(jīng)常遇到的需求,下面這篇文章主要給大家介紹了關(guān)于如何用SQL獲取年、月、周幾、日、時(shí)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • SQL實(shí)現(xiàn)時(shí)間序列錯(cuò)位還原案列

    SQL實(shí)現(xiàn)時(shí)間序列錯(cuò)位還原案列

    這篇文章小編主要向大家介紹的是時(shí)間序列錯(cuò)位還原之SQL實(shí)現(xiàn)案例詳解的相關(guān)資料,需要的小伙伴可以參考下面文章的具體內(nèi)容
    2021-09-09
  • mysql 批量修復(fù)

    mysql 批量修復(fù)

    這篇文章主要介紹了mysql 批量修復(fù),需要的朋友可以參考下
    2016-05-05
  • MySQL批量SQL插入性能優(yōu)化詳解

    MySQL批量SQL插入性能優(yōu)化詳解

    這篇文章主要為大家詳細(xì)介紹了MySQL批量SQL插入性能優(yōu)化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Advanced SQL Injection with MySQL

    Advanced SQL Injection with MySQL

    Advanced SQL Injection with MySQL...
    2006-12-12
  • mysql二進(jìn)制日志文件恢復(fù)數(shù)據(jù)庫(kù)

    mysql二進(jìn)制日志文件恢復(fù)數(shù)據(jù)庫(kù)

    喜歡的在服務(wù)器或者數(shù)據(jù)庫(kù)上直接操作的兄弟們你值得收藏下!不然你就悲劇了。-----(當(dāng)然我也是在網(wǎng)上搜索的資料!不過(guò)自己測(cè)試通過(guò)了的!)
    2014-08-08
  • Mysql指定日期區(qū)間的提取方法

    Mysql指定日期區(qū)間的提取方法

    這篇文章主要介紹了Mysql指定日期區(qū)間的提取方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07

最新評(píng)論