Bonjour à tous,

J'ai constaté à plusieurs reprises un problème de performance sur certaines requêtes du même genre.

Je vous explique :

J'ai une table toute simple qui contient des liens père fils :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
CREATE TABLE [dbo].[SEBM](
	[CodePere] [varchar](30) NOT NULL,
	[CodeFils] [varchar](30) NOT NULL,
 CONSTRAINT [PK_SEBM] PRIMARY KEY CLUSTERED 
(
	[CodePere] ASC,
	[CodeFils] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Cette table contient 150 000 lignes.

si je lance la requête suivante, j'ai une réponse instantannée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
;WITH TREE AS (
		SELECT CodePere as Racine, CodePere, CodeFils
		FROM SEBM
 
		UNION ALL
 
		SELECT TREE.Racine, SEBM.CodePere, SEBM.CodeFils
		FROM TREE
		INNER JOIN SEBM ON SEBM.CodePere = TREE.CodeFils
	)
SELECT * FROM TREE where Racine='11018962'
Si je lance la requête suivante, ça ne répond qu'au bout de 6 secondes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
declare @Valeur varchar(30) = '11018962'
;WITH TREE AS (
		SELECT CodePere as Racine, CodePere, CodeFils
		FROM SEBM
 
		UNION ALL
 
		SELECT TREE.Racine, SEBM.CodePere, SEBM.CodeFils
		FROM TREE
		INNER JOIN SEBM ON SEBM.CodePere = TREE.CodeFils
	)
SELECT * FROM TREE where Racine=@Valeur
OPTION ( OPTIMIZE FOR (@Valeur = '11018962'))
L'option dans la requête est une tentative pour arranger les choses, mais sans succès...

Auriez-vous déjà rencontré un tel problème ?
Si oui, avez vous trouvé une parade ?

Merci d'avance,
Seb