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

Primární třídění klíčů

Data jsou fyzicky uložena pomocí seskupeného indexu, což je obvykle primární klíč, ale nemusí to tak být.

Bez klauzule ORDER BY není zaručeno pořadí dat v SQL. Vždy byste měli zadat klauzuli ORDER BY, když potřebujete, aby data byla v konkrétní objednávce. Pokud je tabulka již takto uspořádána, optimalizátor neprovede žádnou práci navíc, takže není na škodu ji tam mít.

Bez klauzule ORDER BY může RDBMS během čekání na načtení záznamů z disku vracet stránky uložené v mezipaměti odpovídající vašemu dotazu. V takovém případě, i když je v tabulce index, data nemusí přijít v pořadí indexu. (Všimněte si, že toto je pouze příklad – nevím nebo si dokonce myslím, že to udělá RDBMS v reálném světě, ale pro implementaci SQL je to přijatelné chování.)

UPRAVIT

Pokud máte vliv na výkon při řazení oproti stavu, kdy netřídíte, pravděpodobně třídíte podle sloupce (nebo sady sloupců), který nemá index (seskupený nebo jiný). Vzhledem k tomu, že se jedná o časovou řadu, můžete třídit na základě času, ale seskupený index je na primárním bigintu. SQL Server neví, že oba rostou stejným způsobem, takže se musí uchýlit ke všemu.

Pokud sloupec času a sloupec primárního klíče souvisejí podle pořadí (jeden se zvyšuje tehdy a pouze tehdy, když se druhý zvyšuje nebo zůstává stejný), seřaďte místo toho podle primárního klíče. Pokud spolu takto nesouvisí, přesuňte seskupený index z primárního klíče do libovolného sloupce (sloupců), podle kterého třídíte.



  1. Vysvětlení případu Oracle s tipy a příklady

  2. JPA + Hibernate:Jak definovat omezení s ON DELETE CASCADE

  3. ORA-1114 Spuštěný Datapatch

  4. Jak vytvořit funkci SQL Server pro spojení více řádků z poddotazu do jednoho odděleného pole?