web-dev-qa-db-fra.com

Une commande par clause a-t-elle un effet négatif sur la performance?

Je n'ai pas pu trouver la réponse en googling.

Je n'en ai plus entendu que un devis senior pour dire à un Junior Dev qu'en utilisant une commande par clause a un effet négatif sur la performance et il ne devrait pas l'utiliser (Oracle).

Dans quelles circonstances une ordonnance par clause peut-elle défendre négativement sur la performance?

Mise à jour

J'ai trouvé mauvaises performances de la requête SQL en raison de la commande par clause . Existe-t-il d'autres circonstances dans lesquelles une ordonnance par clause peut effectuer des performances négatives?

6
Ascendant

Une ORDER BY La clause ajoutera toujours une opération de tri s'il n'ya pas d'index utilisable pour récupérer les données dans l'ordre. Pour des ensembles de données plus importants, les données triés peuvent être écrites sur le disque en ajoutant un traitement supplémentaire. Pour les petits ensembles de résultats où des index sont utilisés, il ne peut y avoir aucune exigence pour une étape de tri.

Si le tri est requis, la base de données devra récupérer toutes les données de clés de tri et trier avant de présenter les résultats. Cela peut retarder la disponibilité des premières lignes. Si vous voulez seulement les premières lignes d'un grand ensemble, cela peut générer beaucoup de travail supplémentaire pour la base de données.

Que d'être dit, j'ai rarement vu un ORDER BY Clause un impact significatif sur la performance. Je me souviens d'un cas où un développeur a tenté d'améliorer les performances en récupérant un ensemble de résultats non formé et en le triant dans le client, mais cela n'a pas bien fonctionné.

J'évite le ORDER BY Clause, sauf indication contraire des données de comparaître dans une commande donnée. S'il existe une obligation de présenter des données dans une commande donnée, j'utilise le ORDER BY clause. S'il y a une question sur la performance, je teste la requête contre une base de données de production avant de tester des alternatives.

8
BillThor

Cela dépend de la requête et de la taille du jeu de résultats. Si le tri peut être fait en mémoire, c'est toujours "rapide". Mais si c'est trop grand pour la mémoire Oracle écrira le résultat à la température de Tempepace et cela pourrait être pire. Vous pouvez mettre le TEMP TS sur SDD/disque flash Cela améliorera les performances de tri.

2
J. Doe

ORDER BY Sur les grandes tables peut être une catastrophe de performance réelle, essayez d'appliquer la commande par clause sur le plus petit jeu de données possible, en théorie, l'optimiseur fait un bon travail pour choisir le meilleur moyen d'exécuter la commande par ainsi que les performances ne sont donc pas affectées de manière significative, mais dans un véritable lourd. Environnements que j'ai vu la commande par clause qui affectent considérablement la performance. Par exemple, une vue qui sélectionne à partir de 11 tables et renvoie des millions d'enregistrements, si vous ajoutez une commande à la sélection de cette vue, vous attendez 10 fois plus et que le plan d'exécution augmente. Un autre problème pourrait être arrivé lorsque le système a de la chance de la mémoire puis d'appliquer la commande par peut être plus lourde.

1
alonk