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>
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>
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!