Ich habe kürzlich eine Diskussion mit einem Kollegen geführt, der darauf drängte, die Reihenfolge nach Klauseln aus einer Produktionsabfrage zu entfernen, da die Reihenfolge nach Spalte mit dem Primärschlüssel identisch war .
Nach einer langen Diskussion, in der ich zu erklären versuchte, dass er die Bestellung anhand des Primärschlüssels nicht garantieren kann, war die endgültige Schlussfolgerung, dass er nicht darauf drängen würde, die MSSQL-Abfragen zu ändern.
Aber er würde immer noch die DB2-Abfragen ändern.
Ich konnte nicht sofort einen Artikel finden, der widerlegt, dass DB2 Abfragen nach dem Primärschlüssel ordnet, und frage mich derzeit, ob dies der Fall ist oder nicht.
Meine Frage ist also, wie ordnet DB2 eine Abfrage an, wenn es keine order by-Klausel gibt. Verwendet es den Primärschlüssel?
Wie können Sie sicherstellen, dass Daten in einem parallelen System ohne Bestellung per Klausel korrekt bestellt werden?
Wie in der Antwort von ypercube ausgeführt, gibt es keine definierte Reihenfolge , wenn es keine
ORDER BY
Klausel gibt .Was ich hinzufügen möchte, ist, dass es wichtig ist zu erkennen, dass SQL eine Abstraktion ist. Es gibt nicht Schritt für Schritt an, was das DBMS tun soll, sondern spezifiziert Ihre Anforderungen an das Endergebnis.
Dies bedeutet, dass, wenn die Daten bereits so nachgeschlagen werden, dass die richtige Reihenfolge gewährleistet ist, dies darauf zurückzuführen ist, dass das DBMS eine solche Strategie beschlossen hat und dann bereits weiß, dass keine zusätzlichen Sortierarbeiten erforderlich sind, um die Anforderungen der
ORDER BY
Klausel zu erfüllen .Wenn Sie jedoch nicht angeben, dass die Reihenfolge für Sie von Bedeutung ist (obwohl dies tatsächlich der Fall ist?), Berücksichtigt das DBMS dies und findet eine andere Strategie, mit der die richtigen Daten effizienter gefunden werden können Bei einer anderen Bestellung wird die Tatsache ausgenutzt, dass Sie sich anscheinend nicht um die Bestellung gekümmert haben. (Die gewählte Strategie könnte sich auch im Laufe der Zeit ändern, basierend auf der zunehmenden Datenmenge in den relevanten Tabellen, Software-Patches usw.)
Das heißt, das Entfernen der
ORDER BY
Klausel hat nur einen sehr geringen Vorteil (etwas kleinere Abfragegröße), aber möglicherweise einen großen Nachteil, wenn die Reihenfolge tatsächlich wichtig ist. Zumal dies sehr gut mit dem Testdatensatz funktionieren und durch Akzeptanztests kommen könnte, um später ernsthafte Probleme zu verursachen.quelle