sql >> Databáze >  >> RDS >> Sqlserver

Výpočet SQL Server ROW_NUMBER() OVER() pro odvozenou tabulku

Row_Number() OVER (ORDER BY (SELECT 1)) trik by NEMĚL být považován za způsob, jak se vyhnout změně pořadí podkladových dat. Je to pouze způsob, jak zabránit tomu, aby server prováděl dodatečné a nepotřebné řazení (může to přesto provést, ale bude to stát minimální možnou částku ve srovnání s řazením podle sloupce).

Všechny dotazy na SQL serveru NAPROSTO MUSÍ mít ORDER BY klauzule v nejvzdálenějším dotazu, aby byly výsledky spolehlivě uspořádány zaručeným způsobem.

Koncept „zachování původního řádu“ v relačních databázích neexistuje. Tabulky a dotazy musí být vždy považovány za neuspořádané, dokud a pokud ORDER BY klauzule je uvedena v nejvzdálenějším dotazu.

Mohli byste zkusit stejný neobjednaný dotaz 100 000krát a vždy ho obdržet se stejnou objednávkou, a tak uvěřit, že se na uvedenou objednávku můžete spolehnout. To by ale byla chyba, protože jednoho dne se něco změní a nebude to mít pořadí, jaké očekáváte. Jedním příkladem je upgrade databáze na novou verzi SQL Server – to způsobilo, že mnoho dotazů změnilo své pořadí. Ale nemusí to být tak velká změna. Něco tak malého jako přidání nebo odebrání indexu může způsobit rozdíly. A více:Instalace aktualizace service pack. Rozdělení stolu. Vytvoření indexovaného zobrazení, které obsahuje příslušnou tabulku. Dosažení určitého bodu zlomu, kdy je místo hledání vybráno skenování. A tak dále.

Nespoléhejte na to, že výsledky budou seřazeny, pokud jste neřekli „Server, ORDER BY ".

."


  1. if-elseif-else 'podmínka' v Oracle SQL

  2. Zábava s kompresí (columnstore) na velmi velkém stole – část 3

  3. Oracle Query hlásí chybu

  4. Jak uložit nebo načíst sloupec pole pomocí režimu spánku