Wenn ich eine Auswahl mache, ist es immer garantiert, dass mein Ergebnis vom Primärschlüssel bestellt wird, oder sollte ich es mit einer 'Bestellung von' angeben?
Nein, es ist bei weitem nicht garantiert.
SELECT *
FROM table
höchstwahrscheinlich wird TABLE SCAN
verwenden, die Primärschlüssel nicht überhaupt.
können Sie einen Hinweis verwenden:
SELECT /*+ INDEX(pk_index_name) */
*
FROM table
, aber selbst in diesem Fall ist die Bestellung nicht garantiert ist: Wenn Sie Enterprise Edition
verwenden, die Abfrage parallelisiert werden kann.
Dies ist ein Problem, da ORDER BY
nicht in einer SELECT
Klausel Unterabfrage verwendet werden kann und man so etwas nicht schreiben kann:
SELECT (
SELECT column
FROM table
WHERE rownum = 1
ORDER BY
other_column
)
FROM other_table
Gibt es eine Chance, dass die Datensätze in der Reihenfolge des Clustered-Indexes zurückgegeben werden? –
Eine sehr gute Chance, aber nicht garantiert. Komplizierte Abfragen, die Joins, Sichten, Unterabfragen und dergleichen umfassen, können die Ergebnismenge sehr unterschiedlich geordnet belassen. –
AND kann manchmal in der Clustered-Index-Reihenfolge und manchmal nicht zurückgegeben werden. Verwenden Sie immer eine Bestellung, wenn Sie eine bestimmte Bestellung wünschen. – HLGEM