PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Garantiert order by in view order of select?

Sie können sich nicht auf die Reihenfolge der Zeilen in Abfragen verlassen, die kein explizites ORDER BY haben Klausel. Wenn Sie eine geordnete Ansicht abfragen, aber kein ORDER BY einschließen Seien Sie angenehm überrascht, wenn sie in der richtigen Reihenfolge sind, und erwarten Sie nicht, dass es noch einmal passiert.

Das liegt daran, dass der Abfrageoptimierer je nach Abfrage, Tabellenstatistik, Zeilenanzahl, Indizes usw. auf unterschiedliche Weise auf Zeilen zugreifen kann. Wenn es weiß, dass Ihre Anfrage keinen ORDER BY hat -Klausel steht es frei, die Zeilenreihenfolge zu ignorieren, um (hust) Zeilen schneller zurückzugeben.

Etwas off-topic. . .

Die Sortierreihenfolge ist nicht unbedingt plattformübergreifend identisch, selbst bei bekannten Sortierungen. Ich verstehe, dass das Sortieren von UTF-8 unter Mac OS X besonders seltsam ist. (PostgreSQL-Entwickler nennen es kaputt .) PostgreSQL stützt sich auf strcoll(), was meines Wissens auf den Gebietsschemata des Betriebssystems beruht.

Mir ist nicht klar, wie PostgreSQL 9.1 damit umgehen wird. In 9.1 können Sie mehrere Indizes haben, jeder mit einer anderen Sortierung . Ein ORDER BY, das keine Sortierung angibt, verwendet normalerweise die Sortierung der Spalten der zugrunde liegenden Basistabelle, aber was macht der Optimierer mit einem Index? die eine andere Sortierung angibt als eine nicht indizierte Spalte in der Basistabelle?