ホームページ > データベース > mysql チュートリアル > SQL WHERE 句のカンマ区切り文字列を効率的に解析するにはどうすればよいですか?

SQL WHERE 句のカンマ区切り文字列を効率的に解析するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-09 14:12:40
オリジナル
621 人が閲覧しました

How Can I Efficiently Parse Comma-Separated Strings for SQL WHERE Clauses?

カンマ区切り文字列を効率的に処理して 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 レコードを含むデータセットの場合:

  • XML ベースのセグメンテーション: 1 分 21 秒
  • f_split機能: 43 秒

結論:

f_split 関数を使用すると、SQL WHERE 句で使用するカンマ区切り文字列を解析する効率的かつスケーラブルな方法が提供されます。これにより、複数の基準に基づいた柔軟なクエリが可能になり、そのような入力を処理するストアド プロシージャのパフォーマンスが向上します。

以上がSQL WHERE 句のカンマ区切り文字列を効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート