Un programmeur teste et compare la même application qui utilise la même structure de base de données et les mêmes données, uniquement dans deux bases de données distinctes, une avec Oracle 8 et une avec Oracle 9.
L'application exécute une requête sans ORDER BY
clause.
Il prétend que la requête ORDER-BY-less devrait renvoyer les lignes dans le même ordre dans les deux bases de données.
Je lui dis qu'il n'y a pas de garantie pour la même commande de ligne, sauf si vous fournissez explicitement une clause ORDER BY.
La base de données a les mêmes index et clés. Mais le plan d'explication montre que dans l'une des bases de données, le moteur utilise la clé de l'une des tables jointes tandis que dans l'autre base de données, il utilise une autre.
Il insinue que les deux environnements DB ne sont pas égaux, c'est parce qu'ils ont des statistiques différentes, des moteurs rdbms différents, etc., mais pas parce que je n'ai pas réussi à répliquer tous les index de la base de données d'origine.
Je lui dis qu'il doit explicitement prévoir une ORDER BY
clause si l'ordre est vraiment aussi important.
La question
Je peux donc mieux l'expliquer:
Dans quel ordre une requête récupère-t-elle les lignes lorsque vous ne fournissez pas explicitement une clause ORDER BY, et pourquoi cette requête ne renvoie-t-elle pas les lignes dans le même ordre?