j'ai un probleme que je ne comprend vraiment pas.
J'ai un requette de la forme :
SELECT * FROM maTable
WHERE
intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent
AND
intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
AND
intNiveau >= @intNiveauRoot
qui s'execute instantanement et retourne 1 ligne
Mais avec la requette :
SELECT * FROM maTable
WHERE
intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent
AND
intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement,
mais elle prend 3 minutes pour s'executer.
dans ma table j'ai les index :
-pour la cle primaires
-sur intBordGauche
-sur intBordDroit
-sur intNiveau
-et un sur intBordGauche , intBordDroit et intNiveau
Avais vous une idee pour de savoir d'ou vient le probleme ?
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
Patrice
Bonjour,
Commencer par voir le plan d'exécution : http://support.microsoft.com/kb/243589/FR/
Par exemple il se pourrait que le critère sur le niveau soit bien plus restrictifs que les critères sur bordgauche/borddroit pris séparemment (root pour parent pour gauche, parent puis root pour droit ?)
-- Patrice
"Nathan NAU" a écrit dans le message de news: %
Bonjour
j'ai un probleme que je ne comprend vraiment pas. J'ai un requette de la forme : SELECT * FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent AND intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot AND intNiveau >= @intNiveauRoot
qui s'execute instantanement et retourne 1 ligne
Mais avec la requette : SELECT * FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent AND intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement, mais elle prend 3 minutes pour s'executer.
dans ma table j'ai les index : -pour la cle primaires -sur intBordGauche -sur intBordDroit -sur intNiveau -et un sur intBordGauche , intBordDroit et intNiveau
Avais vous une idee pour de savoir d'ou vient le probleme ?
Nathan
Bonjour,
Commencer par voir le plan d'exécution :
http://support.microsoft.com/kb/243589/FR/
Par exemple il se pourrait que le critère sur le niveau soit bien plus
restrictifs que les critères sur bordgauche/borddroit pris séparemment (root
pour parent pour gauche, parent puis root pour droit ?)
--
Patrice
"Nathan NAU" <nathan@actisens.com> a écrit dans le message de news:
%23E8dkzsmGHA.4836@TK2MSFTNGP05.phx.gbl...
Bonjour
j'ai un probleme que je ne comprend vraiment pas.
J'ai un requette de la forme :
SELECT * FROM maTable
WHERE
intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent
AND
intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
AND
intNiveau >= @intNiveauRoot
qui s'execute instantanement et retourne 1 ligne
Mais avec la requette :
SELECT * FROM maTable
WHERE
intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent
AND
intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement,
mais elle prend 3 minutes pour s'executer.
dans ma table j'ai les index :
-pour la cle primaires
-sur intBordGauche
-sur intBordDroit
-sur intNiveau
-et un sur intBordGauche , intBordDroit et intNiveau
Avais vous une idee pour de savoir d'ou vient le probleme ?
Commencer par voir le plan d'exécution : http://support.microsoft.com/kb/243589/FR/
Par exemple il se pourrait que le critère sur le niveau soit bien plus restrictifs que les critères sur bordgauche/borddroit pris séparemment (root pour parent pour gauche, parent puis root pour droit ?)
-- Patrice
"Nathan NAU" a écrit dans le message de news: %
Bonjour
j'ai un probleme que je ne comprend vraiment pas. J'ai un requette de la forme : SELECT * FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent AND intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot AND intNiveau >= @intNiveauRoot
qui s'execute instantanement et retourne 1 ligne
Mais avec la requette : SELECT * FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent AND intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement, mais elle prend 3 minutes pour s'executer.
dans ma table j'ai les index : -pour la cle primaires -sur intBordGauche -sur intBordDroit -sur intNiveau -et un sur intBordGauche , intBordDroit et intNiveau
Avais vous une idee pour de savoir d'ou vient le probleme ?
Nathan
Nathan NAU
Je dirait que le niveau est moin restrictif que le reste car avec : SELECT COUNT(*) FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent;
il renvoir 1 , instantanement avec : SELECT COUNT(*) FROM maTable WHERE intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
il renvoir 1 , instantanement et avec : SELECT COUNT(*) FROM maTable WHERE intNiveau >= @intNiveauRoot
il renvoir 4139628 , en 30 seconde
Je regarde le lien
Merci
"Patrice" a écrit dans le message de news: O%
Bonjour,
Commencer par voir le plan d'exécution : http://support.microsoft.com/kb/243589/FR/
Par exemple il se pourrait que le critère sur le niveau soit bien plus restrictifs que les critères sur bordgauche/borddroit pris séparemment (root pour parent pour gauche, parent puis root pour droit ?)
-- Patrice
"Nathan NAU" a écrit dans le message de news: %
Bonjour
j'ai un probleme que je ne comprend vraiment pas. J'ai un requette de la forme : SELECT * FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent AND intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot AND intNiveau >= @intNiveauRoot
qui s'execute instantanement et retourne 1 ligne
Mais avec la requette : SELECT * FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent AND intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement, mais elle prend 3 minutes pour s'executer.
dans ma table j'ai les index : -pour la cle primaires -sur intBordGauche -sur intBordDroit -sur intNiveau -et un sur intBordGauche , intBordDroit et intNiveau
Avais vous une idee pour de savoir d'ou vient le probleme ?
Nathan
Je dirait que le niveau est moin restrictif que le reste car avec :
SELECT COUNT(*) FROM maTable
WHERE
intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent;
il renvoir 1 , instantanement
avec :
SELECT COUNT(*) FROM maTable
WHERE
intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
il renvoir 1 , instantanement
et avec :
SELECT COUNT(*) FROM maTable
WHERE
intNiveau >= @intNiveauRoot
il renvoir 4139628 , en 30 seconde
Je regarde le lien
Merci
"Patrice" <scribe@chez.com> a écrit dans le message de news:
O%23zJLHtmGHA.5052@TK2MSFTNGP04.phx.gbl...
Bonjour,
Commencer par voir le plan d'exécution :
http://support.microsoft.com/kb/243589/FR/
Par exemple il se pourrait que le critère sur le niveau soit bien plus
restrictifs que les critères sur bordgauche/borddroit pris séparemment
(root pour parent pour gauche, parent puis root pour droit ?)
--
Patrice
"Nathan NAU" <nathan@actisens.com> a écrit dans le message de news:
%23E8dkzsmGHA.4836@TK2MSFTNGP05.phx.gbl...
Bonjour
j'ai un probleme que je ne comprend vraiment pas.
J'ai un requette de la forme :
SELECT * FROM maTable
WHERE
intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent
AND
intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
AND
intNiveau >= @intNiveauRoot
qui s'execute instantanement et retourne 1 ligne
Mais avec la requette :
SELECT * FROM maTable
WHERE
intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent
AND
intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement,
mais elle prend 3 minutes pour s'executer.
dans ma table j'ai les index :
-pour la cle primaires
-sur intBordGauche
-sur intBordDroit
-sur intNiveau
-et un sur intBordGauche , intBordDroit et intNiveau
Avais vous une idee pour de savoir d'ou vient le probleme ?
Je dirait que le niveau est moin restrictif que le reste car avec : SELECT COUNT(*) FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent;
il renvoir 1 , instantanement avec : SELECT COUNT(*) FROM maTable WHERE intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
il renvoir 1 , instantanement et avec : SELECT COUNT(*) FROM maTable WHERE intNiveau >= @intNiveauRoot
il renvoir 4139628 , en 30 seconde
Je regarde le lien
Merci
"Patrice" a écrit dans le message de news: O%
Bonjour,
Commencer par voir le plan d'exécution : http://support.microsoft.com/kb/243589/FR/
Par exemple il se pourrait que le critère sur le niveau soit bien plus restrictifs que les critères sur bordgauche/borddroit pris séparemment (root pour parent pour gauche, parent puis root pour droit ?)
-- Patrice
"Nathan NAU" a écrit dans le message de news: %
Bonjour
j'ai un probleme que je ne comprend vraiment pas. J'ai un requette de la forme : SELECT * FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent AND intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot AND intNiveau >= @intNiveauRoot
qui s'execute instantanement et retourne 1 ligne
Mais avec la requette : SELECT * FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent AND intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement, mais elle prend 3 minutes pour s'executer.
dans ma table j'ai les index : -pour la cle primaires -sur intBordGauche -sur intBordDroit -sur intNiveau -et un sur intBordGauche , intBordDroit et intNiveau
Avais vous une idee pour de savoir d'ou vient le probleme ?
Nathan
Christian Robert
Il serait aussi interessant de savoir quel index est l'index ordonné...
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"Nathan NAU" a écrit :
Je dirait que le niveau est moin restrictif que le reste car avec : SELECT COUNT(*) FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent;
il renvoir 1 , instantanement avec : SELECT COUNT(*) FROM maTable WHERE intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
il renvoir 1 , instantanement et avec : SELECT COUNT(*) FROM maTable WHERE intNiveau >= @intNiveauRoot
il renvoir 4139628 , en 30 seconde
Je regarde le lien
Merci
"Patrice" a écrit dans le message de news: O% > Bonjour, > > Commencer par voir le plan d'exécution : > http://support.microsoft.com/kb/243589/FR/ > > Par exemple il se pourrait que le critère sur le niveau soit bien plus > restrictifs que les critères sur bordgauche/borddroit pris séparemment > (root pour parent pour gauche, parent puis root pour droit ?) > > -- > Patrice > > > "Nathan NAU" a écrit dans le message de news: > % >> Bonjour >> >> j'ai un probleme que je ne comprend vraiment pas. >> J'ai un requette de la forme : >> SELECT * FROM maTable >> WHERE >> intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent >> AND >> intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot >> AND >> intNiveau >= @intNiveauRoot >> >> qui s'execute instantanement et retourne 1 ligne >> >> Mais avec la requette : >> SELECT * FROM maTable >> WHERE >> intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent >> AND >> intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot >> >> qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement, >> mais elle prend 3 minutes pour s'executer. >> >> dans ma table j'ai les index : >> -pour la cle primaires >> -sur intBordGauche >> -sur intBordDroit >> -sur intNiveau >> -et un sur intBordGauche , intBordDroit et intNiveau >> >> Avais vous une idee pour de savoir d'ou vient le probleme ? >> >> Nathan >> > >
Il serait aussi interessant de savoir quel index est l'index ordonné...
--
Cordialement
Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005
"Nathan NAU" a écrit :
Je dirait que le niveau est moin restrictif que le reste car avec :
SELECT COUNT(*) FROM maTable
WHERE
intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent;
il renvoir 1 , instantanement
avec :
SELECT COUNT(*) FROM maTable
WHERE
intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
il renvoir 1 , instantanement
et avec :
SELECT COUNT(*) FROM maTable
WHERE
intNiveau >= @intNiveauRoot
il renvoir 4139628 , en 30 seconde
Je regarde le lien
Merci
"Patrice" <scribe@chez.com> a écrit dans le message de news:
O%23zJLHtmGHA.5052@TK2MSFTNGP04.phx.gbl...
> Bonjour,
>
> Commencer par voir le plan d'exécution :
> http://support.microsoft.com/kb/243589/FR/
>
> Par exemple il se pourrait que le critère sur le niveau soit bien plus
> restrictifs que les critères sur bordgauche/borddroit pris séparemment
> (root pour parent pour gauche, parent puis root pour droit ?)
>
> --
> Patrice
>
>
> "Nathan NAU" <nathan@actisens.com> a écrit dans le message de news:
> %23E8dkzsmGHA.4836@TK2MSFTNGP05.phx.gbl...
>> Bonjour
>>
>> j'ai un probleme que je ne comprend vraiment pas.
>> J'ai un requette de la forme :
>> SELECT * FROM maTable
>> WHERE
>> intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent
>> AND
>> intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
>> AND
>> intNiveau >= @intNiveauRoot
>>
>> qui s'execute instantanement et retourne 1 ligne
>>
>> Mais avec la requette :
>> SELECT * FROM maTable
>> WHERE
>> intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent
>> AND
>> intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
>>
>> qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement,
>> mais elle prend 3 minutes pour s'executer.
>>
>> dans ma table j'ai les index :
>> -pour la cle primaires
>> -sur intBordGauche
>> -sur intBordDroit
>> -sur intNiveau
>> -et un sur intBordGauche , intBordDroit et intNiveau
>>
>> Avais vous une idee pour de savoir d'ou vient le probleme ?
>>
>> Nathan
>>
>
>
Il serait aussi interessant de savoir quel index est l'index ordonné...
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"Nathan NAU" a écrit :
Je dirait que le niveau est moin restrictif que le reste car avec : SELECT COUNT(*) FROM maTable WHERE intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent;
il renvoir 1 , instantanement avec : SELECT COUNT(*) FROM maTable WHERE intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot
il renvoir 1 , instantanement et avec : SELECT COUNT(*) FROM maTable WHERE intNiveau >= @intNiveauRoot
il renvoir 4139628 , en 30 seconde
Je regarde le lien
Merci
"Patrice" a écrit dans le message de news: O% > Bonjour, > > Commencer par voir le plan d'exécution : > http://support.microsoft.com/kb/243589/FR/ > > Par exemple il se pourrait que le critère sur le niveau soit bien plus > restrictifs que les critères sur bordgauche/borddroit pris séparemment > (root pour parent pour gauche, parent puis root pour droit ?) > > -- > Patrice > > > "Nathan NAU" a écrit dans le message de news: > % >> Bonjour >> >> j'ai un probleme que je ne comprend vraiment pas. >> J'ai un requette de la forme : >> SELECT * FROM maTable >> WHERE >> intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent >> AND >> intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot >> AND >> intNiveau >= @intNiveauRoot >> >> qui s'execute instantanement et retourne 1 ligne >> >> Mais avec la requette : >> SELECT * FROM maTable >> WHERE >> intBordGauche BETWEEN @intBordGaucheRoot AND @intBordGaucheParent >> AND >> intBordDroit BETWEEN @intBordDroitParent AND @intBordDroitRoot >> >> qui n'est pas moins restrictive, et retourne bien 1 seul enregistrement, >> mais elle prend 3 minutes pour s'executer. >> >> dans ma table j'ai les index : >> -pour la cle primaires >> -sur intBordGauche >> -sur intBordDroit >> -sur intNiveau >> -et un sur intBordGauche , intBordDroit et intNiveau >> >> Avais vous une idee pour de savoir d'ou vient le probleme ? >> >> Nathan >> > >