SQL有外連接的時(shí)候注意過(guò)濾條件位置否則會(huì)導(dǎo)致網(wǎng)頁(yè)慢_Mssql數(shù)據(jù)庫(kù)教程
推薦:CMD命令操作MSSQL2005數(shù)據(jù)庫(kù)(命令整理)創(chuàng)建數(shù)據(jù)庫(kù)、創(chuàng)建用戶、修改數(shù)據(jù)的所有者、設(shè)置READ_COMMITTED_SNAPSHOT以及備份、日志扥等等,感興趣的朋友可以參考下
奶奶的,為啥現(xiàn)在五一節(jié)只放3天,5月的天氣最適合出游了,不過(guò)俺們這些苦逼的IT男是沒(méi)法享受了。一來(lái)到公司,項(xiàng)目經(jīng)理就找到開(kāi)發(fā)leader,說(shuō)我們網(wǎng)站 頁(yè)面很慢,讓他排查原因。
一聽(tīng)說(shuō) 網(wǎng)站慢,頁(yè)面慢哥就來(lái)精神了,哥的老本行就是 解決“慢”的問(wèn)題。
開(kāi)發(fā)leader 很郁悶的說(shuō),我們已經(jīng)加了 memcache了,20分鐘 cache一次,咋個(gè)還是慢呢,
于是哥就問(wèn),那個(gè)網(wǎng)頁(yè)跑了哪些SQL? 能抓出來(lái)讓我看看嗎? 開(kāi)發(fā)Leader 果斷的把SQL 抓了出來(lái)。
經(jīng)過(guò)排查,我們發(fā)現(xiàn)了一個(gè)SQL確實(shí)跑得慢。該SQL 如下
復(fù)制代碼 代碼如下:hl5o.cn
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í)行計(jì)劃如下
復(fù)制代碼 代碼如下:hl5o.cn
執(zhí)行計(jì)劃
----------------------------------------------------------
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)這個(gè)SQL 的問(wèn)題嗎? 這個(gè) SQL 之所以跑得慢是因?yàn)殚_(kāi)發(fā)人員把SQL的條件寫(xiě)錯(cuò)位置了
正確的寫(xiě)法應(yīng)該是 下面這樣的
復(fù)制代碼 代碼如下:hl5o.cn
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í)行計(jì)劃如下
復(fù)制代碼 代碼如下:hl5o.cn
執(zhí)行計(jì)劃
----------------------------------------------------------
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 有外連接的時(shí)候,要注意過(guò)濾條件的位置,記住啦!��!
有SQL 需要優(yōu)化的 歡迎加入 QQ 群 220761024 申請(qǐng)注明 來(lái)自CSDN
分享:sql 游標(biāo)的使用—游標(biāo)FOR循環(huán)小例子游標(biāo)for循環(huán)是在pl/sql塊中使用游標(biāo)最簡(jiǎn)單的方式,它簡(jiǎn)化了對(duì)游標(biāo)的處理。當(dāng)使用游標(biāo)for循環(huán)時(shí),oracle會(huì)隱含的打開(kāi)游標(biāo),提取游標(biāo)數(shù)據(jù)并關(guān)閉游標(biāo)。
相關(guān)Mssql數(shù)據(jù)庫(kù)教程:
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無(wú)法查看數(shù)據(jù)庫(kù),提示 無(wú)法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- SQL“多字段模糊匹配關(guān)鍵字查詢”
- SQL Server的EXISTS結(jié)構(gòu)學(xué)習(xí)
- 如何使用SQL Server代理運(yùn)行CmdExec命令
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- SQL Server 2000 中使用正則表達(dá)式
- SQL 2005 ERROR:3145 解決辦法(備份集中的數(shù)據(jù)庫(kù)備份與現(xiàn)有的數(shù)據(jù)庫(kù)不同)
- MSSQL 2005/2008 日志壓縮清理方法小結(jié)
- 怎樣合理設(shè)置內(nèi)存讓數(shù)據(jù)庫(kù)與其他程序共存
- SQL Server 數(shù)據(jù)庫(kù)恢復(fù)日志功能
- 三個(gè)影響SQL Server性能的關(guān)鍵點(diǎn)
猜你也喜歡看這些
- 使用MySQL Slow Log來(lái)解決MySQL CPU占用高的問(wèn)題
- 基于unique與primary約束的區(qū)別分析
- SQL字符型字段按數(shù)字型字段排序?qū)崿F(xiàn)方法
- MySQL 主主同步配置步驟
- SQL分組排序去重復(fù)的小實(shí)例
- mysql密碼過(guò)期導(dǎo)致連接不上mysql
- mysql 定時(shí)更新表字段列的值狀態(tài)
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- 關(guān)于Mysql查詢帶單引號(hào)及插入帶單引號(hào)字符串問(wèn)題
- mysql占用CPU過(guò)高的解決辦法(添加索引)
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索SQL有外連接的時(shí)候注意過(guò)濾條件位置否則會(huì)導(dǎo)致網(wǎng)頁(yè)慢
- 教程說(shuō)明:
Mssql數(shù)據(jù)庫(kù)教程-SQL有外連接的時(shí)候注意過(guò)濾條件位置否則會(huì)導(dǎo)致網(wǎng)頁(yè)慢
。