Nemůžete počítat s pořadím řádků v žádném dotazu, který nemá explicitní ORDER BY
doložka. Pokud zadáte dotaz na seřazený pohled, ale nezadáte ORDER BY
klauzule, buďte příjemně překvapeni, pokud jsou ve správném pořadí, a neočekávejte, že se to bude opakovat.
Důvodem je to, že optimalizátor dotazů může přistupovat k řádkům různými způsoby v závislosti na dotazu, statistice tabulky, počtu řádků, indexech a tak dále. Pokud ví, že váš dotaz nemá ORDER BY
klauzule, je zdarma ignorovat pořadí řádků, aby se řádky vracely rychleji.
Poněkud mimo téma . . .
Pořadí řazení nemusí být nutně stejné na různých platformách, a to ani u dobře známých porovnávání. Chápu, že třídění UTF-8 na Mac OS X je obzvláště zvláštní. (Vývojáři PostgreSQL to nazývají rozbité .) PostgreSQL se spoléhá na strcoll(), které, jak jsem pochopil, závisí na národních prostředích OS.
Není mi jasné, jak to PostgreSQL 9.1 zvládne. V 9.1, můžete mít více indexů, každý s jiným řazením . ORDER BY, který neurčuje řazení, obvykle používá řazení sloupců základní tabulky, ale co udělá optimalizátor s indexem který určuje jiné řazení než neindexovaný sloupec v základní tabulce?