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

Clustered vs. Non-clustered

Rozdíl mezi seskupeným indexem a indexem bez klastrů je ten, že seskupený index určuje fyzické pořadí řádků v databázi . Jinými slovy, použití seskupeného indexu na PersonId znamená, že řádky budou fyzicky seřazeny podle PersonId v tabulce, což umožňuje indexové vyhledávání v tomto přejít přímo na řádek (namísto indexu bez klastrů, který by vás nasměroval na umístění řádku a přidal další krok).

To znamená, že je to neobvyklé pro primární klíč není seskupený index, ale není neslýchaný. Problém s vaším scénářem je ve skutečnosti opakem toho, co předpokládáte:chcete jedinečné hodnoty v seskupeném indexu, nikoli duplikáty. Protože seskupený index určuje fyzické pořadí řádku, pokud je index v nejedinečném sloupci, musí server přidat hodnotu pozadí k řádkům, které mají duplicitní hodnotu klíče (ve vašem případě všechny řádky se stejnou PersonId ), aby kombinovaná hodnota (klíč + hodnota pozadí) byla jedinečná.

Jediná věc, kterou bych navrhl, je ne pomocí náhradního klíče (vaše CourtOrderId ) jako primární klíč, ale místo toho použijte složený primární klíč PersonId a nějaký další jednoznačně identifikující sloupec nebo sadu sloupců. Pokud to však není možné (nebo to není praktické), umístěte seskupený index na CourtOrderId .



  1. Úloha pgAgent se nezdaří s chybou ověření

  2. Základy šifrování databáze serveru MariaDB

  3. java.sql.SQLException:Neznámá systémová proměnná 'query_cache_size'

  4. Jak by se dal tento dotaz vylepšit?