sqlserver not in 語句使程充崩潰
更新時(shí)間:2011年12月17日 01:52:04 作者:
以前一直以為優(yōu)化在百萬級的表中才會有意義,這次的事件改變了我的看法
兩張表 組織架構(gòu)表(Organise) 和 工資發(fā)放歷史記錄表 (WagePerMonthHis)
兩張表通過 Organise.Item_id 和 WagePerMonthHis.OrgIdS 進(jìn)行關(guān)聯(lián)
Organise表(以下簡稱O表)中大約有6000條記錄11個(gè)字段 ,WagePerMonthHis(以下簡稱W表)計(jì)有 125萬條記錄 和 25個(gè)字段
原程序中一段如下的語句
是查詢所有不在W表的組織架構(gòu)層級為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
語句執(zhí)行要33秒之久,服務(wù)器的配置是比較高的:16核心4CPU,24G內(nèi)存,且內(nèi)存和CPU在執(zhí)行時(shí)都沒有出現(xiàn)瓶頸,開始以為是 (select OrgidS from WagesPerMonthHis
where WagesYear='2010' and WagesMonth=
'01' Group by OrgidS,OrgNameS) 這條語句執(zhí)行緩慢所致,單獨(dú)執(zhí)行這條卻發(fā)現(xiàn)執(zhí)行速度很快,大約不到2秒就出來了,于是癥結(jié)出來了,是not in 這個(gè)全掃描關(guān)鍵詞帶來的性能下降.最直接的是導(dǎo)致頁面失去響應(yīng),一個(gè)關(guān)鍵功能使用不了.
試了not exist語句,發(fā)現(xiàn)效果是一樣的,并不象網(wǎng)上所說可以提高很多性能.
于是重新優(yōu)化語句如下
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 公司編碼
改用左外連接(其實(shí)左連接也可以)后,整個(gè)語句執(zhí)行速度為400ms, 33秒與400ms 我想是很多人沒想到的.
兩張表通過 Organise.Item_id 和 WagePerMonthHis.OrgIdS 進(jìn)行關(guān)聯(lián)
Organise表(以下簡稱O表)中大約有6000條記錄11個(gè)字段 ,WagePerMonthHis(以下簡稱W表)計(jì)有 125萬條記錄 和 25個(gè)字段
原程序中一段如下的語句
是查詢所有不在W表的組織架構(gòu)層級為2的記錄
復(fù)制代碼 代碼如下:
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
語句執(zhí)行要33秒之久,服務(wù)器的配置是比較高的:16核心4CPU,24G內(nèi)存,且內(nèi)存和CPU在執(zhí)行時(shí)都沒有出現(xiàn)瓶頸,開始以為是 (select OrgidS from WagesPerMonthHis
where WagesYear='2010' and WagesMonth=
'01' Group by OrgidS,OrgNameS) 這條語句執(zhí)行緩慢所致,單獨(dú)執(zhí)行這條卻發(fā)現(xiàn)執(zhí)行速度很快,大約不到2秒就出來了,于是癥結(jié)出來了,是not in 這個(gè)全掃描關(guān)鍵詞帶來的性能下降.最直接的是導(dǎo)致頁面失去響應(yīng),一個(gè)關(guān)鍵功能使用不了.
試了not exist語句,發(fā)現(xiàn)效果是一樣的,并不象網(wǎng)上所說可以提高很多性能.
于是重新優(yōu)化語句如下
復(fù)制代碼 代碼如下:
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 公司編碼
改用左外連接(其實(shí)左連接也可以)后,整個(gè)語句執(zhí)行速度為400ms, 33秒與400ms 我想是很多人沒想到的.
您可能感興趣的文章:
- php對外發(fā)包引發(fā)服務(wù)器崩潰的終極解決方法分享[推薦]
- linux下監(jiān)視進(jìn)程 崩潰掛掉后自動重啟的shell腳本
- Android 如何收集已發(fā)布程序的崩潰信息
- js中關(guān)于一個(gè)分號的崩潰示例
- jquery.uploadify插件在chrome瀏覽器頻繁崩潰解決方法
- iOS 捕獲程序崩潰日志
- 數(shù)據(jù)庫崩潰,利用備份和日志進(jìn)行災(zāi)難恢復(fù)
- 詳解Android中處理崩潰異常
- Android實(shí)現(xiàn)將應(yīng)用崩潰信息發(fā)送給開發(fā)者并重啟應(yīng)用的方法
- 解決iOS7上UITextField限制字?jǐn)?shù)輸入導(dǎo)致崩潰問題的方法
相關(guān)文章
SQL?Server數(shù)據(jù)庫數(shù)據(jù)文件的遷移步驟
最近有朋友問我如何將一臺電腦中的SQL Server數(shù)據(jù)庫數(shù)據(jù)文件遷移到另一臺電腦上,在這給大家分享SQL?Server數(shù)據(jù)庫數(shù)據(jù)文件的遷移步驟,感興趣的朋友一起看看吧2024-03-03sql 百萬級數(shù)據(jù)庫優(yōu)化方案分享
這篇文章介紹了sql 百萬級數(shù)據(jù)庫優(yōu)化方案,有需要的朋友可以參考一下2013-10-10SQL Server中Check約束的學(xué)習(xí)教程
這篇文章主要介紹了SQL Server中Check約束的學(xué)習(xí)教程,包括對啟用Check約束來提升性能的介紹,需要的朋友可以參考下2015-12-12常用SQL語句(嵌套子查詢/隨機(jī)等等)詳細(xì)整理
本文整理了一些常用的sql語句:插入語句得到自動生成的遞增ID值實(shí)現(xiàn)是1 或0 想顯示為男或女/嵌套子查詢/顯示文章、提交人和最后回復(fù)時(shí)間/隨機(jī)提取條記錄的例子等等太多了就不一一講了,感興趣的朋友可以聊接下2013-01-01sqlserver實(shí)現(xiàn)樹形結(jié)構(gòu)遞歸查詢(無限極分類)的方法
下面小編就為大家?guī)硪黄猻qlserver實(shí)現(xiàn)樹形結(jié)構(gòu)遞歸查詢(無限極分類)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07sql實(shí)現(xiàn)split函數(shù)的腳本
這篇文章主要介紹了sql實(shí)現(xiàn)split函數(shù)的腳本,大家參考使用吧2013-11-11使用SQL語句創(chuàng)建觸發(fā)器的實(shí)例
觸發(fā)器 是一種特殊類型的存儲過程,它不同于我們前面介紹過的存儲過程。存儲過程可以通過語句直接調(diào)用,而 觸發(fā)器主要是通過事件進(jìn)行觸發(fā)而被執(zhí)行的,這篇文章主要介紹了使用SQL語句創(chuàng)建觸發(fā)器的實(shí)例,需要的朋友可以參考下2023-06-06sql server刪除前1000行數(shù)據(jù)的方法實(shí)例
最近處理數(shù)據(jù)的時(shí)候遇到了個(gè)問題,需要利用sql刪除表格的前1000行數(shù)據(jù),嘗試過后這里給大家分享下過程,所以下面這篇文章主要給大家介紹了關(guān)于sql server刪除前1000行數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2021-08-08