Oracle
 sql >> Base de données >  >> RDS >> Oracle

INSERT avec ORDER sur Oracle

Vous ne pouvez pas contrôler de manière fiable dans quel ordre Oracle récupère la ligne d'une table sans ORDER BY .

De plus, sans le /*+APPEND*/ indice, Oracle stockera physiquement les lignes dans une table de tas où il y a de la place, qui ne sera peut-être pas en bout de table ! Vous pensez peut-être qu'Oracle les insère de manière séquentielle, mais toute activité DML ou simultanée (insertion de 2 sessions ou plus) peut produire une organisation physique différente.

Vous pouvez utiliser une table INDEX ORGANIZED pour stocker les lignes dans l'ordre du PK. La plupart des requêtes simples par la suite sur cette table produiront un ensemble trié de lignes. Cela ne garantirait toutefois pas qu'Oracle sélectionnera les lignes dans cet ordre si vous ne spécifiez pas ORDER BY (selon la requête et le chemin d'accès, les lignes peuvent apparaître dans n'importe quel ordre).

Vous pouvez également utiliser une vue avec un ordre par, c'est probablement votre meilleur pari si vous ne pouvez pas toucher l'application (renommer la table, créer une vue avec le nom de la table, laisser l'application penser qu'elle interroge la table). Je ne sais pas si c'est faisable dans votre cas.