J'ai ces deux requêtes ci-bas : Qui en principe est la même requête mais
exécuté de façon différente.
La première : temps réponse très rapide 10 ms aucun problème. Plan
d'éxécution est correct utilise le bon INDEX.
La deuxième : Temps répons très lent 1 minutes 7 sec, Plan d'exécution
différent et n'utilise pas le bon INDEX
Comment ca ???
Requête 1:
SELECT ID_CLIEN_IDC FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with (nolock)
WHERE CPE.CLE_SYSTM='OSC_0012235312'
AND CPE.ID_SYSTM=8
AND CPE.CO_TYPE_POINT_ENTR='ADHRN'
AND CPE.TYPE_RELTN='ADM'
Requête 2:
exec sp_executesql
N'SELECT ID_CLIEN_IDC
FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with(nolock)
WHERE CPE.CLE_SYSTM=@CLE_SYSTM
AND CPE.ID_SYSTM=@ID_SYSTM
AND CPE.CO_TYPE_POINT_ENTR=@CO_TYPE_POINT_ENTR
AND CPE.TYPE_RELTN=@TYPE_RELTN',
N'@CLE_SYSTM nvarchar(14),
@ID_SYSTM int,
@CO_TYPE_POINT_ENTR nvarchar(5),
@TYPE_RELTN nvarchar(3)',
@CLE_SYSTM = N'OSC_0012235312',
@ID_SYSTM = 8,
@CO_TYPE_POINT_ENTR = N'ADHRN',
@TYPE_RELTN = N'ADM'
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred.M.
bonjour, Il arrive en effet que le plan d'exécution SQL se gauffre sur du SQL dynamique ou au sein de traitement de curseurs. Dans la mesure où tu as identifié un plan d'exécution correct et le bon index à exploiter, tu peux forcer l'utilisation de cet index en indiquant un index hint:
... from MaTable with (index(MonIndex)) ...
Ainsi le plan d'exécution devra forcément passer par l'index que tu aura poser dans ta requête. Bon courage.
Fred. M. "Psa555" a écrit :
Bonjour,
J'ai ces deux requêtes ci-bas : Qui en principe est la même requête mais exécuté de façon différente. La première : temps réponse très rapide 10 ms aucun problème. Plan d'éxécution est correct utilise le bon INDEX. La deuxième : Temps répons très lent 1 minutes 7 sec, Plan d'exécution différent et n'utilise pas le bon INDEX Comment ca ??? Requête 1: SELECT ID_CLIEN_IDC FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with (nolock) WHERE CPE.CLE_SYSTM='OSC_0012235312' AND CPE.ID_SYSTM=8 AND CPE.CO_TYPE_POINT_ENTR='ADHRN' AND CPE.TYPE_RELTN='ADM' Requête 2: exec sp_executesql N'SELECT ID_CLIEN_IDC FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with(nolock) WHERE CPE.CLE_SYSTM=@CLE_SYSTM AND CPE.ID_SYSTM=@ID_SYSTM AND CPE.CO_TYPE_POINT_ENTR=@CO_TYPE_POINT_ENTR AND CPE.TYPE_RELTN=@TYPE_RELTN', N'@CLE_SYSTM nvarchar(14), @ID_SYSTM int, @CO_TYPE_POINT_ENTR nvarchar(5), @TYPE_RELTN nvarchar(3)', @CLE_SYSTM = N'OSC_0012235312', @ID_SYSTM = 8, @CO_TYPE_POINT_ENTR = N'ADHRN', @TYPE_RELTN = N'ADM'
bonjour,
Il arrive en effet que le plan d'exécution SQL se gauffre sur du SQL
dynamique ou au sein de traitement de curseurs. Dans la mesure où tu as
identifié un plan d'exécution correct et le bon index à exploiter, tu peux
forcer l'utilisation de cet index en indiquant un index hint:
... from MaTable with (index(MonIndex))
...
Ainsi le plan d'exécution devra forcément passer par l'index que tu aura
poser dans ta requête.
Bon courage.
Fred. M.
"Psa555" a écrit :
Bonjour,
J'ai ces deux requêtes ci-bas : Qui en principe est la même requête mais
exécuté de façon différente.
La première : temps réponse très rapide 10 ms aucun problème. Plan
d'éxécution est correct utilise le bon INDEX.
La deuxième : Temps répons très lent 1 minutes 7 sec, Plan d'exécution
différent et n'utilise pas le bon INDEX
Comment ca ???
Requête 1:
SELECT ID_CLIEN_IDC FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with (nolock)
WHERE CPE.CLE_SYSTM='OSC_0012235312'
AND CPE.ID_SYSTM=8
AND CPE.CO_TYPE_POINT_ENTR='ADHRN'
AND CPE.TYPE_RELTN='ADM'
Requête 2:
exec sp_executesql
N'SELECT ID_CLIEN_IDC
FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with(nolock)
WHERE CPE.CLE_SYSTM=@CLE_SYSTM
AND CPE.ID_SYSTM=@ID_SYSTM
AND CPE.CO_TYPE_POINT_ENTR=@CO_TYPE_POINT_ENTR
AND CPE.TYPE_RELTN=@TYPE_RELTN',
N'@CLE_SYSTM nvarchar(14),
@ID_SYSTM int,
@CO_TYPE_POINT_ENTR nvarchar(5),
@TYPE_RELTN nvarchar(3)',
@CLE_SYSTM = N'OSC_0012235312',
@ID_SYSTM = 8,
@CO_TYPE_POINT_ENTR = N'ADHRN',
@TYPE_RELTN = N'ADM'
bonjour, Il arrive en effet que le plan d'exécution SQL se gauffre sur du SQL dynamique ou au sein de traitement de curseurs. Dans la mesure où tu as identifié un plan d'exécution correct et le bon index à exploiter, tu peux forcer l'utilisation de cet index en indiquant un index hint:
... from MaTable with (index(MonIndex)) ...
Ainsi le plan d'exécution devra forcément passer par l'index que tu aura poser dans ta requête. Bon courage.
Fred. M. "Psa555" a écrit :
Bonjour,
J'ai ces deux requêtes ci-bas : Qui en principe est la même requête mais exécuté de façon différente. La première : temps réponse très rapide 10 ms aucun problème. Plan d'éxécution est correct utilise le bon INDEX. La deuxième : Temps répons très lent 1 minutes 7 sec, Plan d'exécution différent et n'utilise pas le bon INDEX Comment ca ??? Requête 1: SELECT ID_CLIEN_IDC FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with (nolock) WHERE CPE.CLE_SYSTM='OSC_0012235312' AND CPE.ID_SYSTM=8 AND CPE.CO_TYPE_POINT_ENTR='ADHRN' AND CPE.TYPE_RELTN='ADM' Requête 2: exec sp_executesql N'SELECT ID_CLIEN_IDC FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with(nolock) WHERE CPE.CLE_SYSTM=@CLE_SYSTM AND CPE.ID_SYSTM=@ID_SYSTM AND CPE.CO_TYPE_POINT_ENTR=@CO_TYPE_POINT_ENTR AND CPE.TYPE_RELTN=@TYPE_RELTN', N'@CLE_SYSTM nvarchar(14), @ID_SYSTM int, @CO_TYPE_POINT_ENTR nvarchar(5), @TYPE_RELTN nvarchar(3)', @CLE_SYSTM = N'OSC_0012235312', @ID_SYSTM = 8, @CO_TYPE_POINT_ENTR = N'ADHRN', @TYPE_RELTN = N'ADM'
Psa555
Merci j'ai trouvé la problèmatique ....
Les paramêtres étaient typés nvarchar ... au lieu de varchar ... ce qui fait une grosse différence car un conversion ce fait et le choix du plan d'éxécution est faussé.
Merci
"Fred.M." a écrit :
bonjour, Il arrive en effet que le plan d'exécution SQL se gauffre sur du SQL dynamique ou au sein de traitement de curseurs. Dans la mesure où tu as identifié un plan d'exécution correct et le bon index à exploiter, tu peux forcer l'utilisation de cet index en indiquant un index hint:
... from MaTable with (index(MonIndex)) ...
Ainsi le plan d'exécution devra forcément passer par l'index que tu aura poser dans ta requête. Bon courage.
Fred. M. "Psa555" a écrit :
> Bonjour, > > J'ai ces deux requêtes ci-bas : Qui en principe est la même requête mais > exécuté de façon différente. > La première : temps réponse très rapide 10 ms aucun problème. Plan > d'éxécution est correct utilise le bon INDEX. > La deuxième : Temps répons très lent 1 minutes 7 sec, Plan d'exécution > différent et n'utilise pas le bon INDEX > Comment ca ??? > Requête 1: > SELECT ID_CLIEN_IDC FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with (nolock) > WHERE CPE.CLE_SYSTM='OSC_0012235312' > AND CPE.ID_SYSTM=8 > AND CPE.CO_TYPE_POINT_ENTR='ADHRN' > AND CPE.TYPE_RELTN='ADM' > Requête 2: > exec sp_executesql > N'SELECT ID_CLIEN_IDC > FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with(nolock) > WHERE CPE.CLE_SYSTM=@CLE_SYSTM > AND CPE.ID_SYSTM=@ID_SYSTM > AND CPE.CO_TYPE_POINT_ENTR=@CO_TYPE_POINT_ENTR > AND CPE.TYPE_RELTN=@TYPE_RELTN', > N'@CLE_SYSTM nvarchar(14), > @ID_SYSTM int, > @CO_TYPE_POINT_ENTR nvarchar(5), > @TYPE_RELTN nvarchar(3)', > @CLE_SYSTM = N'OSC_0012235312', > @ID_SYSTM = 8, > @CO_TYPE_POINT_ENTR = N'ADHRN', > @TYPE_RELTN = N'ADM' >
Merci j'ai trouvé la problèmatique ....
Les paramêtres étaient typés nvarchar ... au lieu de varchar ... ce qui fait
une grosse
différence car un conversion ce fait et le choix du plan d'éxécution est
faussé.
Merci
"Fred.M." a écrit :
bonjour,
Il arrive en effet que le plan d'exécution SQL se gauffre sur du SQL
dynamique ou au sein de traitement de curseurs. Dans la mesure où tu as
identifié un plan d'exécution correct et le bon index à exploiter, tu peux
forcer l'utilisation de cet index en indiquant un index hint:
... from MaTable with (index(MonIndex))
...
Ainsi le plan d'exécution devra forcément passer par l'index que tu aura
poser dans ta requête.
Bon courage.
Fred. M.
"Psa555" a écrit :
> Bonjour,
>
> J'ai ces deux requêtes ci-bas : Qui en principe est la même requête mais
> exécuté de façon différente.
> La première : temps réponse très rapide 10 ms aucun problème. Plan
> d'éxécution est correct utilise le bon INDEX.
> La deuxième : Temps répons très lent 1 minutes 7 sec, Plan d'exécution
> différent et n'utilise pas le bon INDEX
> Comment ca ???
> Requête 1:
> SELECT ID_CLIEN_IDC FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with (nolock)
> WHERE CPE.CLE_SYSTM='OSC_0012235312'
> AND CPE.ID_SYSTM=8
> AND CPE.CO_TYPE_POINT_ENTR='ADHRN'
> AND CPE.TYPE_RELTN='ADM'
> Requête 2:
> exec sp_executesql
> N'SELECT ID_CLIEN_IDC
> FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with(nolock)
> WHERE CPE.CLE_SYSTM=@CLE_SYSTM
> AND CPE.ID_SYSTM=@ID_SYSTM
> AND CPE.CO_TYPE_POINT_ENTR=@CO_TYPE_POINT_ENTR
> AND CPE.TYPE_RELTN=@TYPE_RELTN',
> N'@CLE_SYSTM nvarchar(14),
> @ID_SYSTM int,
> @CO_TYPE_POINT_ENTR nvarchar(5),
> @TYPE_RELTN nvarchar(3)',
> @CLE_SYSTM = N'OSC_0012235312',
> @ID_SYSTM = 8,
> @CO_TYPE_POINT_ENTR = N'ADHRN',
> @TYPE_RELTN = N'ADM'
>
Les paramêtres étaient typés nvarchar ... au lieu de varchar ... ce qui fait une grosse différence car un conversion ce fait et le choix du plan d'éxécution est faussé.
Merci
"Fred.M." a écrit :
bonjour, Il arrive en effet que le plan d'exécution SQL se gauffre sur du SQL dynamique ou au sein de traitement de curseurs. Dans la mesure où tu as identifié un plan d'exécution correct et le bon index à exploiter, tu peux forcer l'utilisation de cet index en indiquant un index hint:
... from MaTable with (index(MonIndex)) ...
Ainsi le plan d'exécution devra forcément passer par l'index que tu aura poser dans ta requête. Bon courage.
Fred. M. "Psa555" a écrit :
> Bonjour, > > J'ai ces deux requêtes ci-bas : Qui en principe est la même requête mais > exécuté de façon différente. > La première : temps réponse très rapide 10 ms aucun problème. Plan > d'éxécution est correct utilise le bon INDEX. > La deuxième : Temps répons très lent 1 minutes 7 sec, Plan d'exécution > différent et n'utilise pas le bon INDEX > Comment ca ??? > Requête 1: > SELECT ID_CLIEN_IDC FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with (nolock) > WHERE CPE.CLE_SYSTM='OSC_0012235312' > AND CPE.ID_SYSTM=8 > AND CPE.CO_TYPE_POINT_ENTR='ADHRN' > AND CPE.TYPE_RELTN='ADM' > Requête 2: > exec sp_executesql > N'SELECT ID_CLIEN_IDC > FROM dbo.IDCT0107_CLIEN_POINT_ENTR CPE with(nolock) > WHERE CPE.CLE_SYSTM=@CLE_SYSTM > AND CPE.ID_SYSTM=@ID_SYSTM > AND CPE.CO_TYPE_POINT_ENTR=@CO_TYPE_POINT_ENTR > AND CPE.TYPE_RELTN=@TYPE_RELTN', > N'@CLE_SYSTM nvarchar(14), > @ID_SYSTM int, > @CO_TYPE_POINT_ENTR nvarchar(5), > @TYPE_RELTN nvarchar(3)', > @CLE_SYSTM = N'OSC_0012235312', > @ID_SYSTM = 8, > @CO_TYPE_POINT_ENTR = N'ADHRN', > @TYPE_RELTN = N'ADM' >