[OPTIMISATION]fonction de concaténation
Bonjour,
je suis sous SQL server 2000
j'ai une fonction de concaténation de différents champs que j'utilise pour insérer des données dans une 2éme table.
Voici ma fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
CREATE FUNCTION FN_CONCAT (@ECR_ID NUMERIC)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @CH3 VARCHAR(8000)
SET @CH3=''
SELECT @CH3=@CH3+
ISNULL(CG_C1,'') + ';'
+ ISNULL(CG_C2,'') + ';'
+ ISNULL(CONVERT(VARCHAR(10),CG_C3),'')+';'
+ ISNULL(CG_C4,'') +';'
+ ISNULL(CG_C5,'') +';'
+ ISNULL(CG_C6,'')
+ ';'
FROM T_ECR
WHERE CG_ECR_ID=@ECR_ID
IF (@CH3 <>'' ) SET @CH3= LEFT(@CH3, LEN(@CH3)-1)
RETURN @CH3
END |
l'appel à ma fonction se fait via cette requête :
Code:
1 2 3 4 5 6 7 8
|
insert into T_TECH
(TECH_ID,TECH_C)
SELECT distinct CG_ID,
dbo.FN_CONCAT(CG_ECR_ID),
FROM T_ECR
ORDER BY
CG_ECR_ID |
A faible volume de ma table T_ECR, cette fonction marche trés bien, mais si j'ai beaucoup de données (30000 lignes par exemple dans T_ECR dont 9000 CG_ECR_ID différents) ma fonction prend 18 minutes
ma table T_ECR continet juste un index sur sa clé primaire (numéro automatique) et même si je crée un index sur l'ensemble des CG_Cn qui sont sélectionnés dans la concaténation, ceci ne s'améliore pas !
Voyez vous quelques choses pour optimiser ?
Merci.