Je suis déconcerté par une requête à Oracle qui retourne dans un ordre apparemment aléatoire.
| Date | Amount -------------------------- 1 | 26-OCT-10 | 85 2 | 26-OCT-10 | 9 3 | 26-OCT-10 | 100
4 Réponses :
sons comme Oracle utilise un Stable Algorithme de tri pour faire le tri. P>
Citation requise. Les documents Oracle n'affirment pas que les résultats sont définis lors du tri de deux valeurs identiques. télécharger.oracle.com/docs/cd/ E11882_01 / Server.112 / E17118 / ...
Jeffrey est correct: l'ordre peut sembler stable, mais en réalité, il est tout à fait possible pour la commande de changer - par exemple si un index est ajouté à la table.
La commande n'est pas réduite à "Pure Chance" - sauf si vous modifiez la requête à:
SELECT Date, Amount FROM MyTable WHERE Date = '26-OCT-2010' ORDER BY Date, DBMS_RANDOM.VALUE;
Merci pour l'explication! Je pensais que cela peut simplement «revenir» à l'ordre rencontré, comme SQL Server, mais n'était pas si sûr. Merci encore!
Bien que je ne connaisse rien sur la mise en œuvre d'Oracle, si toutes choses étant égales, dans Priory, ils ne seront pas dans un ordre aléatoire: les mettre dans un ordre aléatoire nécessiterait une randomisation de la commande à chaque fois, (qui serait n opérations randomissantes, où n est le nombre d'éléments (en utilisant la grosse notation, ce serait O (n)), ce qui est une chose calculée en calcul, si la requête reviendrait énormément (millions) de résultats. P>
retourné par la requête p>
Il n'est pas nécessaire qu'ils soient randomisés de cette manière. P>
Au lieu de cela, cela les renvoie simplement (ce que je devine, c'est) la commande qu'ils sont stockées sur disque p>
Lire Cette belle pièce du blog de Tom Kyte concernant la commande . P>
Lorsque vous dites que les lignes sont revenues dans la commande "1,3,2", vous devez commander par la ou les colonnes qui vous disent que c'est dans 1,3,2 afin de le réparer. P>