Je tente d'écrire une pagination de la taille de la base de données des résultats de la requête. Comme SQL Server 2012 offre OFFSET/FETCH
, je l'utilise. Mais après avoir ajouté l'instruction à ma requête, cela prend 10 fois plus de temps.Lenteur des performances lors de l'utilisation de OFFSET/FETCH avec Fulltext dans SQL Server 2012
Les requêtes:
SELECT
p.ShopId,
count(1) as ProductsQuantity,
MIN(LastPrice) as MinPrice,
MAX(LastPrice) as MaxPrice
FROM Product2 p WITH (NOLOCK)
INNER JOIN
CONTAINSTABLE(Product2, ProductName, 'czarny') AS KEY_TBL
ON KEY_TBL.[key]=p.Id
WHERE
(p.LastStatus > 0 OR p.LastStatus = -1)
GROUP BY p.ShopId
ORDER BY p.ShopId asc
SELECT
p.ShopId,
count(1) as ProductsQuantity,
MIN(LastPrice) as MinPrice,
MAX(LastPrice) as MaxPrice
FROM Product2 p WITH (NOLOCK)
INNER JOIN
CONTAINSTABLE(Product2, ProductName, 'czarny') AS KEY_TBL
ON KEY_TBL.[key]=p.Id
WHERE
(p.LastStatus > 0 OR p.LastStatus = -1)
GROUP BY p.ShopId
ORDER BY p.ShopId asc
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY
Première requête retourne les résultats en 3 secondes, la seconde en 47 secondes. Plan d'exécution sont différentes, et le coût de la seconde est évaluée seulement 7%, ce qui rend tout à fait aucun sens pour moi:
Je dois aider comment améliorer les performances de la mise en page.
+1 à cette question, juste en dehors du factyou ajouté un plan expliquer sans que personne aksing pour elle et c'est en fait une pagination de problème dans les rencontres T-SQL assez souvent – Najzero