S'agit-il d'un nouveau modèle commun dans Oracle Où existe-t-il (Sélectionnez NULL FROM…)?

8

Il y a des années, il était courant d'écrire

where exists (Select * from some_table where some_condition)

L'année dernière, j'ai remarqué que de nombreux scripts t-sql sont passés à l'utilisation du numéro 1 au lieu de l'étoile

where exists (Select 1 from some_table where some_condition)

juste SO donc j'ai vu cet exemple Oracle

WHERE EXISTS (SELECT NULL FROM ...

Est-ce un modèle courant avec Oracle? Et quels sont les arguments de performance pour utiliser quelque chose comme ça.

bernd_k
la source
2
SO a une discussion à ce sujet. stackoverflow.com/questions/424212/…
Leigh Riffel

Réponses:

6

Réponse courte: j'espère que non!

Même l' SELECT 1idiome peut avoir survécu à son utilité, car les moteurs de base de données ont suffisamment avancé pour reconnaître que vous ne voulez pas vraiment les lignes, vous voulez juste savoir si les lignes existent. J'ai examiné les plans d'exécution dans SQL 2005 et les ai généralement réécrits comme des jointures, même là où ils SELECT *sont utilisés.

Larry Coleman
la source
5

Dans Oracle, peu importe les performances. Vous pouvez même y mettre 1/0 et l'instruction ne renverra pas d'erreur de division par zéro car l'expression n'est pas évaluée.

Leigh Riffel
la source
1
Doit-on clôturer cette procédure pour se fier à la question des SO? Est-ce l'un de ceux qui "migrent le SO vers dba.SE"?
jcolebrand