OVH Cloud OVH Cloud

Problème d'optimisation de requête pour résultat paginé

2 réponses
Avatar
Anthony
Bonjour,

Je dispose aujourd'hui d'une table avec beaucoup d'enregistrement.
J'ai aujourd'hui des problèmes d'optimisation pour une requête permettant de
sélectionner une plage de résultat.
J'ai mis en place une nouvelle requête comme suit :
WITH PagedResult AS (SELECT ROW_NUMBER() OVER (order by I.Name) AS
RowNumber, I.Id
FROM Table_Indexe I WHERE ( I.FirstName = 'toto') )
SELECT*FROM Table_Datas a INNER JOIN PagedResult AS pr ON a.Id=pr.Id WHERE
RowNumber between 0 AND 9

Cela marche très bien. Cependant lorsque je veux la dernière page (à peu
près 400000 résultats), cad de 399990 à 399999, cela met un temps fou (time
out). J'aip ourtant indexer les colonnes.

J'ai remarqué que si j'enlève la clause sur FirstName, cela devient aussi
rapide quelque soit la plage.

Je m'en remet donc à vous. Peut être avez vous une requête bien meilleure.

Merci,

Anthony

--
Anthony
Développeur .NET

2 réponses

Avatar
Sylvain Lafontaine
Possiblement qu'un index est manquant sur FirstName ou que vous avez mélangé
de l'Ascii avec de l'Unicode. Vous devriez jeter un coup d'oeil sur les
plans d'exécution.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"Anthony" wrote in message
news:
Bonjour,

Je dispose aujourd'hui d'une table avec beaucoup d'enregistrement.
J'ai aujourd'hui des problèmes d'optimisation pour une requête permettant
de
sélectionner une plage de résultat.
J'ai mis en place une nouvelle requête comme suit :
WITH PagedResult AS (SELECT ROW_NUMBER() OVER (order by I.Name) AS
RowNumber, I.Id
FROM Table_Indexe I WHERE ( I.FirstName = 'toto') )
SELECT*FROM Table_Datas a INNER JOIN PagedResult AS pr ON a.Id=pr.Id
WHERE
RowNumber between 0 AND 9

Cela marche très bien. Cependant lorsque je veux la dernière page (à peu
près 400000 résultats), cad de 399990 à 399999, cela met un temps fou
(time
out). J'aip ourtant indexer les colonnes.

J'ai remarqué que si j'enlève la clause sur FirstName, cela devient aussi
rapide quelque soit la plage.

Je m'en remet donc à vous. Peut être avez vous une requête bien meilleure.

Merci,

Anthony

--
Anthony
Développeur .NET


Avatar
Anthony
Désolé, j'ai bien posé un index sur le firstname. Et cela n'expliquerai pas
que les résultats sont plus rapides en ramenant les résultats de 0 à 9 que
les derniers.

--
Anthony
Développeur .NET


"Sylvain Lafontaine" a écrit :

Possiblement qu'un index est manquant sur FirstName ou que vous avez mélangé
de l'Ascii avec de l'Unicode. Vous devriez jeter un coup d'oeil sur les
plans d'exécution.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"Anthony" wrote in message
news:
> Bonjour,
>
> Je dispose aujourd'hui d'une table avec beaucoup d'enregistrement.
> J'ai aujourd'hui des problèmes d'optimisation pour une requête permettant
> de
> sélectionner une plage de résultat.
> J'ai mis en place une nouvelle requête comme suit :
> WITH PagedResult AS (SELECT ROW_NUMBER() OVER (order by I.Name) AS
> RowNumber, I.Id
> FROM Table_Indexe I WHERE ( I.FirstName = 'toto') )
> SELECT*FROM Table_Datas a INNER JOIN PagedResult AS pr ON a.Id=pr.Id
> WHERE
> RowNumber between 0 AND 9
>
> Cela marche très bien. Cependant lorsque je veux la dernière page (à peu
> près 400000 résultats), cad de 399990 à 399999, cela met un temps fou
> (time
> out). J'aip ourtant indexer les colonnes.
>
> J'ai remarqué que si j'enlève la clause sur FirstName, cela devient aussi
> rapide quelque soit la plage.
>
> Je m'en remet donc à vous. Peut être avez vous une requête bien meilleure.
>
> Merci,
>
> Anthony
>
> --
> Anthony
> Développeur .NET