0

where 句でユーザー定義関数を使用して、配列を値のテーブルに分割するクエリがあります。それは次のようなものです:

select ...
from ...
where EXISTS(SELECT Value FROM fn_Split(@Status,'#')
and EXISTS(SELECT Value FROM fn_Split(@Type,'#') 

@Status と @Type はユーザーから渡されます。複数の値を選択してクエリを実行できます。

このユーザー定義関数を削除する方法はありますか? あなたの提案は何ですか?

4

2 に答える 2

1

あなたの外側のクエリに依存していないfn_Split(@Status, '#')ようです。fn_Split(@Type, '#')その場合、クエリを実行する前に両方の関数を呼び出して (おそらくテーブルを返すと思います)、それらのテーブルをクエリで使用できます。それらが大きい場合は、それらにインデックスを追加してみてください。

于 2013-01-25T23:43:17.973 に答える
0

特にスカラー関数に関しては、実行計画の内容を常に信頼できるとは限りません。

ただし、スカラー分割関数の効果をテストできます-これらの関数への典型的な入力の一部を取得し、それをハードコードして選択し、SET STATISTICS IO/TIME ON にしてから、分割内の同じデータで同じことを行います. スカラーが問題を引き起こしている場合、それは明らかなはずです。

于 2013-01-26T03:06:04.290 に答える