正確的寫法應(yīng)該是下面這樣的,感興趣的朋友可以參考下" />

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

SQL有外連接的時候注意過濾條件位置否則會導(dǎo)致網(wǎng)頁慢

 更新時間:2013年05月03日 17:13:33   投稿:whsnow  
這個SQL之所以跑得慢是因為開發(fā)人員把SQL的條件寫錯位置了 
正確的寫法應(yīng)該是下面這樣的,感興趣的朋友可以參考下

一來到公司,項目經(jīng)理就找到開發(fā)leader,說我們網(wǎng)站 頁面很慢,讓他排查原因。
一聽說 網(wǎng)站慢,頁面慢哥就來精神了,哥的老本行就是 解決“慢”的問題。
開發(fā)leader 很郁悶的說,我們已經(jīng)加了 memcache了,20分鐘 cache一次,咋個還是慢呢,
于是哥就問,那個網(wǎng)頁跑了哪些SQL? 能抓出來讓我看看嗎? 開發(fā)Leader 果斷的把SQL 抓了出來。
經(jīng)過排查,我們發(fā)現(xiàn)了一個SQL確實跑得慢。該SQL 如下

復(fù)制代碼 代碼如下:

select *
from (select u.NAME UniversityName,
u.id UniversityId,
count(a.SIGNUPNUMBER) playercnt
from T_B_UNIVERSITY u
left join T_D_EDUCATION e
on e.UNIVERSITY_ID = u.id
left join T_D_VIDEO_PLAYER a
on a.USER_ID = e.user_id
and e.ISDEFAULT = 1
and e.ISVALID = 1
and a.AUDITSTATUS = 1
and a.ISVALID = 1
left join T_D_USER c
on a.USER_ID = c.id
and c.ISVALID = 1
where u.REGION_CODE like '43%'
group by u.NAME, u.id)
order by playercnt desc;

執(zhí)行計劃如下
復(fù)制代碼 代碼如下:

執(zhí)行計劃
----------------------------------------------------------
Plan hash value: 3938743742
--------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 142 | 10366 | 170 (3)| 00:00:03 |
| 1 | SORT ORDER BY | | 142 | 10366 | 170 (3)| 00:00:03 |
| 2 | HASH GROUP BY | | 142 | 10366 | 170 (3)| 00:00:03 |
|* 3 | HASH JOIN RIGHT OUTER| | 672 | 49056 | 168 (2)| 00:00:03 |
|* 4 | TABLE ACCESS FULL | T_D_USER | 690 | 5520 | 5 (0)| 00:00:01 |
| 5 | NESTED LOOPS OUTER | | 672 | 43680 | 162 (1)| 00:00:02 |
|* 6 | HASH JOIN OUTER | | 672 | 37632 | 14 (8)| 00:00:01 |
|* 7 | TABLE ACCESS FULL | T_B_UNIVERSITY | 50 | 2050 | 8 (0)| 00:00:01 |
| 8 | TABLE ACCESS FULL | T_D_EDUCATION | 672 | 10080 | 5 (0)| 00:00:01 |
| 9 | VIEW | | 1 | 9 | 0 (0)| 00:00:01 |
|* 10 | FILTER | | | | | |
|* 11 | TABLE ACCESS FULL| T_D_VIDEO_PLAYER | 1 | 15 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("A"."USER_ID"="C"."ID"(+))
4 - filter("C"."ISVALID"(+)=1)
6 - access("E"."UNIVERSITY_ID"(+)="U"."ID")
7 - filter("U"."REGION_CODE" LIKE '43%')
10 - filter("E"."ISVALID"=1 AND "E"."ISDEFAULT"=1)
11 - filter("A"."USER_ID"="E"."USER_ID" AND "A"."AUDITSTATUS"=1 AND
"A"."ISVALID"=1)

大家能發(fā)現(xiàn)這個SQL 的問題嗎? 這個 SQL 之所以跑得慢是因為開發(fā)人員把SQL的條件寫錯位置了
正確的寫法應(yīng)該是 下面這樣的
復(fù)制代碼 代碼如下:

select *
from (select u.NAME UniversityName,
u.id UniversityId,
count(a.SIGNUPNUMBER) playercnt
from T_B_UNIVERSITY u
left join T_D_EDUCATION e
on e.UNIVERSITY_ID = u.id
and e.ISDEFAULT = 1
and e.ISVALID = 1
left join T_D_VIDEO_PLAYER a
on a.USER_ID = e.user_id
and a.AUDITSTATUS = 1
and a.ISVALID = 1
left join T_D_USER c
on a.USER_ID = c.id
and c.ISVALID = 1
where u.REGION_CODE like '43%'
group by u.NAME, u.id)
order by playercnt desc;

執(zhí)行計劃如下
復(fù)制代碼 代碼如下:

執(zhí)行計劃
----------------------------------------------------------
Plan hash value: 2738827747
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 142 | 11218 | 25 (16)| 00:00:01 |
| 1 | SORT ORDER BY | | 142 | 11218 | 25 (16)| 00:00:01 |
| 2 | HASH GROUP BY | | 142 | 11218 | 25 (16)| 00:00:01 |
|* 3 | HASH JOIN RIGHT OUTER | | 301 | 23779 | 23 (9)| 00:00:01 |
|* 4 | TABLE ACCESS FULL | T_D_USER | 690 | 5520 | 5 (0)| 00:00:01 |
|* 5 | HASH JOIN RIGHT OUTER| | 301 | 21371 | 17 (6)| 00:00:01 |
|* 6 | TABLE ACCESS FULL | T_D_VIDEO_PLAYER | 78 | 1170 | 3 (0)| 00:00:01 |
|* 7 | HASH JOIN OUTER | | 301 | 16856 | 14 (8)| 00:00:01 |
|* 8 | TABLE ACCESS FULL | T_B_UNIVERSITY | 50 | 2050 | 8 (0)| 00:00:01 |
|* 9 | TABLE ACCESS FULL | T_D_EDUCATION | 301 | 4515 | 5 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("A"."USER_ID"="C"."ID"(+))
4 - filter("C"."ISVALID"(+)=1)
5 - access("A"."USER_ID"(+)="E"."USER_ID")
6 - filter("A"."AUDITSTATUS"(+)=1 AND "A"."ISVALID"(+)=1)
7 - access("E"."UNIVERSITY_ID"(+)="U"."ID")
8 - filter("U"."REGION_CODE" LIKE '43%')
9 - filter("E"."ISDEFAULT"(+)=1 AND "E"."ISVALID"(+)=1)

之前SQL要跑至少5秒以上,現(xiàn)在0.1秒能出結(jié)果。
各位童鞋,SQL 有外連接的時候,要注意過濾條件的位置,記住啦!??!
有SQL 需要優(yōu)化的 歡迎加入 QQ 群 220761024 申請注明 來自CSDN

相關(guān)文章

  • SQL Server 置疑、可疑、正在恢復(fù)等情況分析

    SQL Server 置疑、可疑、正在恢復(fù)等情況分析

    有些時候當(dāng)你重啟了數(shù)據(jù)庫服務(wù),會發(fā)現(xiàn)有些數(shù)據(jù)庫變成了正在恢復(fù)、置疑、可疑等情況,這個時候DBA就會很緊張了,下面是一些在實踐中得到證明的方法
    2011-12-12
  • 關(guān)于數(shù)據(jù)庫優(yōu)化問題收集匯總

    關(guān)于數(shù)據(jù)庫優(yōu)化問題收集匯總

    筆者在工作實踐中發(fā)現(xiàn),不良的SQL往往來自于不恰當(dāng)?shù)乃饕O(shè)計、不充份的連接條件和不可優(yōu)化的where子句。以下就對數(shù)據(jù)庫優(yōu)化問題進行了介紹,需要的朋友可以參考下
    2013-07-07
  • 把excel表格里的數(shù)據(jù)導(dǎo)入sql數(shù)據(jù)庫的兩種方法

    把excel表格里的數(shù)據(jù)導(dǎo)入sql數(shù)據(jù)庫的兩種方法

    這篇文章介紹了把excel表格里的數(shù)據(jù)導(dǎo)入sql數(shù)據(jù)庫的兩種方法,有需要的朋友可以參考一下
    2013-09-09
  • SQLserver存儲過程寫法與設(shè)置定時執(zhí)行存儲過程方法詳解

    SQLserver存儲過程寫法與設(shè)置定時執(zhí)行存儲過程方法詳解

    一直都很想了解如何寫存儲過程,對于不熟悉的東西,總是覺得很神秘,下面這篇文章主要給大家介紹了關(guān)于SQLserver存儲過程寫法與設(shè)置定時執(zhí)行存儲過程方法的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • SQL Server子查詢的深入理解

    SQL Server子查詢的深入理解

    這篇文章主要給大家介紹了關(guān)于SQL Server子查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 親自教你使用?ChatGPT?編寫?SQL?JOIN?查詢示例

    親自教你使用?ChatGPT?編寫?SQL?JOIN?查詢示例

    這篇文章主要介紹了使用ChatGPT編寫SQL?JOIN查詢,作為一種語言模型,ChatGPT 可以就如何構(gòu)建復(fù)雜的 SQL 查詢和 JOIN 提供指導(dǎo)和建議,但它不能直接訪問 SQL 數(shù)據(jù)庫,它可以幫助您了解語法、最佳實踐和有關(guān)如何構(gòu)建查詢以高效執(zhí)行的一般指導(dǎo),需要的朋友可以參考下
    2023-02-02
  • SQL中g(shù)roupBy和eq的同時使用問題

    SQL中g(shù)roupBy和eq的同時使用問題

    groupBy和eq同時使用可能會導(dǎo)致錯誤,本文就來介紹一下SQL中g(shù)roupBy和eq的同時使用問題,感興趣的可以了解一下
    2024-05-05
  • sql server學(xué)習(xí)基礎(chǔ)之內(nèi)存初探

    sql server學(xué)習(xí)基礎(chǔ)之內(nèi)存初探

    這篇文章主要給大家介紹了關(guān)于sql server中內(nèi)存的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者理解sql server具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Sql Server2016 正式版安裝程序圖解教程

    Sql Server2016 正式版安裝程序圖解教程

    這篇文章主要介紹了sql server2016 正式版安裝程序圖的相關(guān)資料,本文給大家提供了安裝包的下載地址,對sql server 2016安裝的過程感興趣的朋友可以參考下
    2016-09-09
  • Transactional replication(事務(wù)復(fù)制)詳解之如何跳過一個事務(wù)

    Transactional replication(事務(wù)復(fù)制)詳解之如何跳過一個事務(wù)

    事務(wù)復(fù)制由 SQL Server 快照代理、日志讀取器代理和分發(fā)代理實現(xiàn)。 快照代理準(zhǔn)備快照文件(其中包含了已發(fā)布表和數(shù)據(jù)庫對象的架構(gòu)和數(shù)據(jù)),然后將這些文件存儲在快照文件夾中,并在分發(fā)服務(wù)器中的分發(fā)數(shù)據(jù)庫中記錄同步作業(yè)。
    2014-08-08

最新評論

海口市| 白银市| 阜城县| 卓尼县| 五指山市| 莎车县| 永嘉县| 柳江县| 广丰县| 浠水县| 东明县| 从化市| 大石桥市| 宁都县| 隆德县| 达日县| 阜新市| 高邑县| 清流县| 会东县| 邓州市| 东源县| 基隆市| 平潭县| 河西区| 景洪市| 卢龙县| 南通市| 武夷山市| 崇州市| 阜康市| 安平县| 龙井市| 文登市| 若尔盖县| 长岛县| 郧西县| 凤阳县| 汉川市| 新乡县| 沙洋县|