SQL Server 2008 fonctionnant sous Windows Server Enterprise (?) Edition 2008SQL Server ORDER BY Performance Aberration
J'ai une requête contre se joindre à vingt-impair quelques tables (principalement LEFT OUTER JOIN). L'ensemble de données complet renvoyé par une requête non filtrée renvoie moins de 1 000 lignes en moins de 1 seconde. Lorsque j'applique une clause WHERE pour filtrer la requête, elle renvoie moins de 300 lignes en moins de 1 seconde.
Lorsque j'applique une clause ORDER BY à la requête renvoyée dans les années 90. J'ai examiné les résultats de la requête et noté un nombre de résultats NULL retournés dans la colonne utilisée pour trier. J'ai modifié la requête à COALESCE une valeur NULL à une valeur de recherche valide sans aucune modification de la performance de la requête.
J'ai alors fait un
SELECT * FROM
(
my query goes here
) qry
ORDER BY myOrderByHere
Et qui ont produit les mêmes résultats.
Lorsque je sélectionne ... INTO #tempTable (sans ORDER BY), puis SELECT FROM du paramètre #tempTable avec l'ordre de la requête renvoie moins de 1s. Ce qui est vraiment étrange à ce stade est que le SELECT ... INTO prendra aussi 90s même sans ORDER BY. Le plan d'exécution indique que le tri prend 98% du temps d'exécution lorsqu'il est inclus dans la requête principale. Si je fais INSERT INTO, le plan explicite indique que l'insertion réelle dans la table temporaire prend 99% du temps d'exécution.
Et pour supprimer les problèmes de serveur, j'ai exécuté les mêmes tests sur deux instances différentes de SQL Server 2008 avec des résultats presque identiques.
Merci beaucoup!
rjsjr
Sur mon dev/serveur de test TempDB est 400MB grand et a 400 Mo d'espace disponible. Sous Recovery, je vois que l'option Page Verify est définie sur CHECKSUM. J'ai veillé à ce que le fichier journal soit tronqué et réexécuté les tests sans modification des résultats. J'ai également essayé de déplacer le corps principal de la requête dans une vue et d'exécuter les commandes SELECT et ORDER sur cette vue. Cela produit les mêmes résultats. –