Nie, nie można polegać na tym zachowaniu. Kolejność zależy od sposobu, w jaki planista zapytań zdecydował o zbudowaniu zestawu wyników. proste zapytania, takie jak select * from foo_table
prawdopodobnie zostaną zwrócone w kolejności, w jakiej są przechowywane na dysku, która może być w kolejności klucza podstawowego, kolejności, w jakiej zostały utworzone, lub innej losowej kolejności. bardziej złożone zapytania, takie jak select * from foo where bar < 10
zamiast tego mogą być zwracane w kolejności innej kolumny, na podstawie odczytanego indeksu lub kolejności tabeli w przypadku skanowania tabeli. jeszcze bardziej rozbudowane zapytania, z wieloma where
warunki, group by
klauzule, union
s, będzie w takiej kolejności, w jakiej planista uzna, że jest to najbardziej efektywne do wygenerowania.
Kolejność może nawet zmienić się między dwoma identycznymi zapytaniami tylko z powodu danych, które zmieniły się między tymi zapytaniami. Klauzula „where” może być spełniona podczas skanowania indeksu w jednym zapytaniu, ale późniejsze wstawienia mogą sprawić, że ten warunek będzie mniej selektywny, a planista może zdecydować się na wykonanie kolejnego zapytania przy użyciu skanowania tabeli.
Aby postawić na to dokładniejszy punkt. Systemy RDBMS mają obowiązek dawać ci dokładnie to, o co prosiłeś, tak skutecznie, jak to możliwe. Ta wydajność może przybierać wiele form, w tym minimalizację IO (zarówno na dysk, jak i przez sieć w celu wysłania danych do Ciebie), minimalizację procesora i utrzymywanie małego rozmiaru zestawu roboczego (przy użyciu metod, które wymagają minimalnego tymczasowego przechowywania).
bez ORDER BY
klauzula, nie zapytasz dokładnie dla określonej kolejności, a więc RDBMS poda te wiersze w takiej kolejności, która (być może) odpowiada pewnemu przypadkowemu aspektowi zapytania, w oparciu o dowolny algorytm, który RDBMS spodziewa się wygenerować dane najszybciej.
Jeśli zależy Ci na wydajności, ale nie na porządku, pomiń ORDER BY
klauzula. Jeśli zależy Ci na porządku, ale nie na wydajności, użyj ORDER BY
klauzula.
Ponieważ tak naprawdę zależy Ci na OBU użyj ORDER BY
a następnie dokładnie dostosuj zapytanie i bazę danych, aby były wydajne.