SQL效能優化之join臨時表關聯查詢取代in

2021-10-18 01:25:24 字數 1960 閱讀 3777

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...