カンマ区切り文字列を使用した SQL WHERE IN 句の最適化
ストアド プロシージャは、多くの場合、カンマ区切りの文字列パラメータを受け取ります。 WHERE IN
句内で使用するためにこれらの文字列を効率的に変換することは、パフォーマンスにとって非常に重要です。この記事では、この変換のベスト プラクティスについて詳しく説明します。
ユーザー定義関数 (UDF) の活用
堅牢なソリューションには、カンマ区切りの文字列を解析するための UDF の作成が含まれます。 SQL Server 2005 以降のバージョンの高パフォーマンスの UDF は、以下に示す f_split
です。
<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>
クエリ統合
この UDF は、IN
句を使用したフィルタリングを簡素化します。
<code class="language-sql">SELECT * FROM yourtable WHERE account IN (SELECT val FROM dbo.f_split(@account, ','))</code>
パフォーマンスの比較: UDF と XML
STRING_SPLIT
(XML ベースの分割) は代替手段ですが、f_split
は特に大規模なデータセットで優れたパフォーマンスを一貫して示します。 ベンチマーク テストでこの利点が確認されました。
概要
f_split
UDF は、WHERE IN
句内のカンマ区切り文字列を処理するための信頼性が高く効率的な方法を提供します。 パフォーマンス上の利点があるため、推奨されるアプローチです。
以上がSQL WHERE IN 句のカンマ区切り文字列を効率的に解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。