sql >> Databáze >  >> RDS >> PostgreSQL

Garantuje objednávka podle výběru pořadí výběru?

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?



  1. Jak ošetřit chyby ve vnořených transakcích SQL Server

  2. Poškození databáze

  3. Aktualizujte konkrétní řádek v tabulce pomocí tlačítka

  4. Jak vytvořit stromovou tabulku bez cyklického vztahu?