Maison > base de données > tutoriel mysql > Comment analyser efficacement les chaînes séparées par des virgules pour les clauses SQL WHERE IN ?

Comment analyser efficacement les chaînes séparées par des virgules pour les clauses SQL WHERE IN ?

DDD
Libérer: 2025-01-09 14:09:41
original
752 Les gens l'ont consulté

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

Optimisation des clauses SQL WHERE IN avec des chaînes séparées par des virgules

Les procédures stockées reçoivent souvent des paramètres de chaîne séparés par des virgules. La conversion efficace de ces chaînes pour une utilisation dans les clauses WHERE IN est cruciale pour les performances. Cet article détaille les bonnes pratiques pour cette conversion.

Exploiter les fonctions définies par l'utilisateur (UDF)

Une solution robuste consiste à créer un UDF pour analyser la chaîne séparée par des virgules. Un UDF hautes performances pour SQL Server 2005 et versions ultérieures est f_split, présenté ci-dessous :

<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>
Copier après la connexion

Intégration des requêtes

Cette UDF simplifie le filtrage avec la clause IN :

<code class="language-sql">SELECT *
FROM yourtable 
WHERE account IN (SELECT val FROM dbo.f_split(@account, ','))</code>
Copier après la connexion

Comparaison des performances : UDF vs XML

Bien que STRING_SPLIT (fractionnement basé sur XML) soit une alternative, f_split démontre systématiquement des performances supérieures, en particulier avec de grands ensembles de données. Les tests de référence confirment cet avantage.

Résumé

L'UDF f_split offre une méthode fiable et efficace pour traiter les chaînes séparées par des virgules dans les clauses WHERE IN. Ses avantages en termes de performances en font l'approche recommandée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal