国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

sqlserver not in 語句使程充崩潰

2024-08-31 00:58:01
字體:
來源:轉載
供稿:網友
兩張表 組織架構表(Organise) 和 工資發放歷史記錄表 (WagePerMonthHis)
兩張表通過 Organise.Item_id 和 WagePerMonthHis.OrgIdS 進行關聯
Organise表(以下簡稱O表)中大約有6000條記錄11個字段 ,WagePerMonthHis(以下簡稱W表)計有 125萬條記錄 和 25個字段

原程序中一段如下的語句
是查詢所有不在W表的組織架構層級為2的記錄

復制代碼 代碼如下:


select OrgId as 公司編碼,OrgName as 公司名稱
from Organise
where OrgLev=2
and item_id not in
(select OrgidS from WagesPerMonthHis
where WagesYear='2010' and WagesMonth=
'01' Group by OrgidS,OrgNameS)
order by Orgid


語句執行要33秒之久,服務器的配置是比較高的:16核心4CPU,24G內存,且內存和CPU在執行時都沒有出現瓶頸,開始以為是 (select OrgidS from WagesPerMonthHis
where WagesYear='2010' and WagesMonth=
'01' Group by OrgidS,OrgNameS) 這條語句執行緩慢所致,單獨執行這條卻發現執行速度很快,大約不到2秒就出來了,于是癥結出來了,是not in 這個全掃描關鍵詞帶來的性能下降.最直接的是導致頁面失去響應,一個關鍵功能使用不了.

試了not exist語句,發現效果是一樣的,并不象網上所說可以提高很多性能.

于是重新優化語句如下

復制代碼 代碼如下:


select a.OrgId as 公司編碼,a.OrgName as 公司名稱,a.item_id
from Organise a
left outer join (select distinct b.OrgIdS from WagesPerMonthHis b
where WagesYear='2010' and WagesMonth='01') as b
on a.item_id = b.OrgidS
where a.OrgLev = 2
and b.OrgIdS is Null
order by 公司編碼


改用左外連接(其實左連接也可以)后,整個語句執行速度為400ms, 33秒與400ms 我想是很多人沒想到的.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长宁县| 墨竹工卡县| 磐石市| 庐江县| 邵武市| 绿春县| 涿鹿县| 繁昌县| 河曲县| 敖汉旗| 永兴县| 屏东市| 茌平县| 韶关市| 瓮安县| 托克逊县| 庆城县| 凤山市| 綦江县| 屏山县| 潜山县| 蚌埠市| 会泽县| 石首市| 太仆寺旗| 久治县| 安福县| 周至县| 磴口县| 桦川县| 儋州市| 武鸣县| 类乌齐县| 武安市| 株洲市| 大埔县| 大冶市| 崇阳县| 福安市| 庄浪县| 辽阳县|