何百万ものレコードを操作するクエリがあるとしましょう。今、私はこれを私のWHERE句に入れています、
WHERE Status IN (SELECT VALUE FROM SPLIT(@Status,','))
明らかに、'SELECT VALUE FROM SPLIT(@Status、'、')'はすべての行で動作します。これを改善する必要があります。
何百万ものレコードを操作するクエリがあるとしましょう。今、私はこれを私のWHERE句に入れています、
WHERE Status IN (SELECT VALUE FROM SPLIT(@Status,','))
明らかに、'SELECT VALUE FROM SPLIT(@Status、'、')'はすべての行で動作します。これを改善する必要があります。
現在のソリューションを実行するか、そのパフォーマンスをINNER JOIN
:と比較することができます。
SELECT A.*
FROM YourTable A
INNER JOIN SPLIT(@Status,',') B
ON A.Status = B.Value
SPLIT
関数からの結果を最初に配置してから、これtable variable/temp table
を実行するのINNER JOIN
はどうですか?
文字列を一時テーブルに解凍し、代わりにクエリで使用します。一時テーブルのフィールドにインデックスを付けると役立つはずです。
create table #Split (Value varchar(10) primary key)
insert into #Split(Value)
select distinct Value
from SPLIT(@Status, ',')
select SomeCol
from YourTable
where Status in (select Value from #Split)
drop table #Split