我有下面提到的兩種方法來完成一項任務。 1st從表中直接多次選擇,第二次從表中選擇所需的列到表變量中,然後多次使用該表變量。哪一個表現會更好,爲什麼?表Vs表變量
declare
@var1 varchar(10),
@var2 varchar(10)
----------------------------------------------------------------------------
-- 1st approach
----------------------------------------------------------------------------
select *
from tab1
where tab1.col1 in (select tab2.col1 from tab2 where tab2.col2 <> @var1) or
tab1.col2 in (select tab2.col2 from tab2 where tab2.col3 <> @var2)
----------------------------------------------------------------------------
-- 2nd approach
----------------------------------------------------------------------------
declare @tab2 table (col1 varchar(10), col2 varchar(10))
insert into @tab2
select col1,
col2
from tab2
select *
from tab1
where tab1.col1 in (select t.col1 from @tab2 as t where t.col2 <> @var1) or
tab1.col2 in (select t.col2 from @tab2 as t where t.col3 <> @var2)
哪一個SQL查詢分析說會更好? –
@PaulHadfield測試期間第一種方法看起來更好,但是當tab2中有兩倍或三倍的記錄時它會保持它的優勢嗎? – yogi
告訴服務器*你想要*,而不是*如何做*。對於一張小桌子,表格可能會被完全加載到內存中,所以第二次掃描的成本應該可以忽略不計。對於大型表格,您現在正迫使數據庫爲其分配*額外*存儲空間,這是因爲您不相信優化器能夠完成其工作。編寫簡單易懂的代碼,只有在* measured *性能不符合你的性能*目標時纔開始玩弄事物(如果你沒有後者,你怎麼知道你什麼時候「完成」了? ) –