J'ai une requête SQL SELECT qui retourne beaucoup de lignes, et je dois le diviser en plusieurs partitions. Par exemple, définissez les résultats max à 10000 et parcourez les lignes appelant la requête select time en augmentant le premier résultat (0, 10000, 20000). Toutes les requêtes sont effectuées dans la même transaction, et les données que mes requêtes récupèrent ne changent pas pendant le processus (d'autres données dans ces tables peuvent changer, cependant).Les résultats sont-ils déterministes si je partitionne une requête SQL SELECT sans ORDER BY?
Est-il autorisé à utiliser select tout simplement:
select a from b where...
Ou dois-je utiliser pour par la sélection:
select a from b where ... order by c
Pour être sûr que je vais obtenir toutes les des rangées? En d'autres termes, est-il garanti qu'une requête sans ordre retournera toujours les lignes dans le même ordre? L'ajout de l'ordre à la requête entraîne une baisse considérable des performances de la requête. J'utilise Oracle, si cela est important.
EDIT: Malheureusement, je ne peux pas profiter du curseur de défilement.
* Toujours * utiliser la commande si vous souhaitez que votre jeu de données soit commandé. S'il y a un problème de performances, c'est un problème différent (vérifiez les index, examinez les plans d'exécution, etc.). – paxdiablo
pour les performances: utilisez la colonne indexée pour la clause order by ou appliquez l'index à la colonne que vous souhaitez utiliser dans l'ordre par la clause – Saar