ホームページ > データベース > mysql チュートリアル > SQL WHERE IN 句のカンマ区切り文字列を効率的に解析する方法

SQL WHERE IN 句のカンマ区切り文字列を効率的に解析する方法

DDD
リリース: 2025-01-09 14:09:41
オリジナル
755 人が閲覧しました

How to Efficiently Parse Comma-Separated Strings for SQL WHERE IN Clauses?

カンマ区切り文字列を使用した 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 サイトの他の関連記事を参照してください。

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