Ordre d'évaluation de la clause SQL d'Oracle

dans Oracle, quels types de clause sont évalués en premier? Si j'avais ce qui suit (Faire Semblant .... représenter des expressions valides et des noms de relation), quel serait l'ordre d'évaluation?

SELECT   ...
FROM     .....
WHERE    ........
GROUP BY ...........
HAVING   .............
ORDER BY ................

je suis sous l'impression que la clause SELECT est évaluée en dernier, mais d'autres que je suis paumé.

4
demandé sur jon.johnson 2010-05-16 05:07:57

5 réponses

la liste select ne peut pas toujours être évaluée en dernier parce que L'ordre Par peut utiliser des alias qui sont définis dans la liste select de sorte qu'ils doivent être exécutés après. Par exemple:

SELECT foo+bar foobar FROM table1 ORDER BY foobar

je dirais qu'en général, l'ordre d'exécution pourrait être quelque chose comme ceci:

  • de
  • GROUP BY
  • sélectionner
  • ayant
  • ORDER BY

Le GROUPE et PAR les clauses where peuvent être échangés sans changer le résultat, comme on a pu l'AVOIR et de l'ORDRE.

en réalité, les choses sont plus complexes parce que la base de données peut réorganiser l'exécution selon différents plans d'exécution. Tant que le résultat reste le même, peu importe dans quel ordre il est exécuté.

Notez aussi que si un index est choisi pour L'ordre par clause les lignes peuvent déjà être dans le bon ordre lorsqu'elles sont lues à partir du disque. Dans ce cas, L'ordre Par clause n'est pas du tout exécuté.

3
répondu Mark Byers 2010-05-16 01:53:37

C'est à ça que servent les plans d'exécution. Mais, généralement, il ya seulement 1 façon de le faire. Je vais ignorer les optimisations pour le moment:

  • à PARTIR de la table impliquée
  • commence à balayer la table de, en gardant ceux qui passent où clause
  • sélectionnez Colonnes non agrégées
  • calculer les colonnes agrégées avec le groupe par
  • conserver les résultats groupés qui passent ayant clause
  • résultats d'ordre avec ORDRE PAR

les optimisations pourraient causer un "coup d'oeil" pour prendre de meilleures décisions (p. ex., ce serait une bonne idée de vérifier la clause où avant de scanner la table - un index peut être disponible).

je crois que la plupart des RDBM résolvent cela avec un pré-passage à travers un optimiseur qui va réécrire la requête pour profiter des index, supprimer les expressions redondantes, etc. Cette requête optimisée est ensuite utilisé pour construire le plan d'exécution. Il y a aussi le parallélisme qui pourrait changer les détails - mais les bases sont les mêmes.

3
répondu Mark Brackett 2010-05-16 01:58:38

Oracle Query Processing Order""

  • de la clause
  • WHERE clause
  • GROUP BY clause
  • avec clause
  • SELECT clause
  • ORDER BY clause
3
répondu Hemanth 2016-12-02 09:43:31

ci-dessous est L'ordre de traitement de requête SQL:

  1. FROM
  2. CONNECT BY
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. SELECT
  7. ORDER BY
2
répondu gupta79ratnesh 2017-03-23 13:40:32

Logique de Traitement de l'Ordre de la SELECT déclaration

  1. de
  2. ON
  3. JOIN
  4. GROUP BY
  5. avec CUBE ou avec ROLLUP
  6. ayant
  7. sélectionner
  8. DISTINCT
  9. ORDER BY

c'est l'ordre logique à utiliser dans l'écriture/(logiquement penser) la requête. La base de données peut optimiser la requête de différentes façons au cours de l'exécution réelle pour des raisons d'efficacité, aussi longtemps que les résultats retournés sont les mêmes que si elle a suivi cet ordre d'exécution.

Références

Microsoft T-SQL

Oracle Blog

0
répondu Pankil Shah 2018-08-17 17:42:30