カンマ区切り文字列を効率的に処理して SQL クエリを最適化します
SQL Server では、ストアド プロシージャを使用するときに、WHERE 句で使用するためにカンマ区切りの文字列を値リストに解析する必要があることがよくあります。これにより、複数の基準に基づいてデータを動的にフィルタリングできます。
問題の説明:
ストアド プロシージャはパラメータとしてカンマ区切りの文字列を受け取ります。これを IN 句ステートメントに変換する必要があります。たとえば、
<code class="language-sql">WHERE Account IN ('SA', 'A')</code>
ベストプラクティス:
これを行うには、ユーザー定義関数 (UDF) を使用して、カンマ区切りの文字列を個々の値に分割します。このタスクを実行する f_split
という名前の効率的な UDF を次に示します。
<code class="language-sql">CREATE function [dbo].[f_split] ( @param nvarchar(max), @delimiter char(1) ) returns @t table (val nvarchar(max), seq int) as begin set @param += @delimiter ;with a as ( select cast(1 as bigint) f, charindex(@delimiter, @param) t, 1 seq union all select t + 1, charindex(@delimiter, @param, t + 1), seq + 1 from a where charindex(@delimiter, @param, t + 1) > 0 ) insert @t select substring(@param, f, t - f), seq from a option (maxrecursion 0) return end</code>
使用法:
f_split
関数を使用するには、次のステートメントを使用できます:
<code class="language-sql">SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
パフォーマンスの比較:
f_split
関数は、XML ベースのセグメンテーション方法に比べてパフォーマンスに大きな利点があります。たとえば、100,000 レコードを含むデータセットの場合:
f_split
機能: 43 秒結論:
f_split
関数を使用すると、SQL WHERE 句で使用するカンマ区切り文字列を解析する効率的かつスケーラブルな方法が提供されます。これにより、複数の基準に基づいた柔軟なクエリが可能になり、そのような入力を処理するストアド プロシージャのパフォーマンスが向上します。
以上がSQL WHERE 句のカンマ区切り文字列を効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。