in適合什麼場合呢,如果後面的value list很少,而且欄位上存在索引,甚至是主鍵,這個時候用in效能比較高,但是當value list達到一定的臨界值的時候會導致all全表掃瞄
1.對於語句中包含in(guid1, guid2…)的情況, 如果guid比較多, 先將guid放入臨時表, 且對臨時表建立唯一聚集索引
in的方式,fn_split1方法之前的文件有
select
distinct
v.vouchguid
from
dbo.s_voucher v
where
v.vouchguid in
(select
value
from
dbo.fn_split1(
'7e1ea565-0f0b-4db0-97ca-efaa288270f1,205f1baa-0435-47f2-bb65-ff6e834b7f0e,5fe2d20e-2ae9-4493-ac42-4f3ced0a919b,2eb70d71-7cdd-4f40-b5d4-b1c9d33439d5,0f8f09d9-96ba-42a8-923c-587ee9a93eed,3ab0fea6-30b5-41ab-8b2f-0dff77d6f37e,851abfd9-7a3a-4905-8ee8-a6e45559c883,9b5600c2-f201-48c4-bbf4-054f3c107c29,484d84de-7a37-436f-96e2-3e04a606aca1,09c79bab-7248-4fd8-b7ff-03fc1ee6aa8e,cc19055b-0360-45df-b6a3-576e7b84020c'
,','))
;
臨時表關聯
select
cast(
value
as uniqueidentifier)
as vouchgui
into
#tempvouchguids
from
dbo.fn_split1(
'7e1ea565-0f0b-4db0-97ca-efaa288270f1,205f1baa-0435-47f2-bb65-ff6e834b7f0e,5fe2d20e-2ae9-4493-ac42-4f3ced0a919b,2eb70d71-7cdd-4f40-b5d4-b1c9d33439d5,0f8f09d9-96ba-42a8-923c-587ee9a93eed,3ab0fea6-30b5-41ab-8b2f-0dff77d6f37e,851abfd9-7a3a-4905-8ee8-a6e45559c883,9b5600c2-f201-48c4-bbf4-054f3c107c29,484d84de-7a37-436f-96e2-3e04a606aca1,09c79bab-7248-4fd8-b7ff-03fc1ee6aa8e,cc19055b-0360-45df-b6a3-576e7b84020c'
,','
) a;
select
distinct
v.vouchguid
from
dbo.s_voucher v
inner
join
#tempvouchguids temp
on v.vouchguid =
temp
.vouchgui;
drop
table
#tempvouchguids;
測試id生成方法
list listguid=new list()
;for
(var i =
0; i <=
10; i++)
var guids = string.
join
(","
, listguid)
; console.readkey(
);
SQLServer效能優化之活用臨時表
繼續調優,今天上午分析了以下一條處理時間達40秒的sql語句 select from table where t table id in select distinct s.t table id from select distinct a.t table id,a.bt from select l...
使用臨時表進行效能優化
這兩個月都在搞一儲存過程,快要被它搞出精神病了。主要是它執行的時間比較長,每次執行幾十分鐘是常有的事,幾個小時也不少見。甚至乎這幾天,執行了兩天一夜都還不知道何時會圓滿結束。等待本來就是乙個痛苦的過程,而這個過程要幾天幾夜,那我不瘋誰人瘋。這肯定是有問題的。執行時間超過1小時的都應該有問題。後來,改...
優化臨時表使用,SQL語句效能提公升100倍
sql語句如下 select distinct g.cp.name as cp name,c.name as category name,t.name as type name fromgm gameg left joingm cpcp on cp.id g.cp id and cp.deleted...