Vytvoření jedinečného indexu
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Database v Microsoft Fabricu
Toto téma popisuje, jak vytvořit jedinečný index tabulky v SQL Serveru pomocí aplikace SQL Server Management Studio nebo Transact-SQL. Jedinečný index zaručuje, že klíč indexu neobsahuje žádné duplicitní hodnoty, a proto je každý řádek v tabulce nějakým způsobem jedinečný. Neexistují žádné významné rozdíly mezi vytvořením omezení UNIQUE a vytvořením jedinečného indexu, který je nezávislý na omezení. Ověření dat probíhá stejným způsobem a optimalizátor dotazů nerozlišuje mezi jedinečným indexem vytvořeným omezením nebo ručně vytvořeným. Vytvoření omezení UNIQUE ve sloupci však způsobí, že cíl indexu bude jasný. Další informace o omezeních UNIQUE naleznete v tématu Jedinečná omezení a kontrola omezení.
Při vytváření jedinečného indexu můžete nastavit možnost ignorovat duplicitní klíče. Pokud je tato možnost nastavená na Ano a pokusíte se vytvořit duplicitní klíče přidáním dat, která mají vliv na více řádků (s příkazem INSERT), řádek obsahující duplikát se nepřidá. Pokud je nastavena na Ne, celá operace vložení selže a všechna data se vrátí zpět.
Poznámka
Nelze vytvořit jedinečný index pro jeden sloupec, pokud tento sloupec obsahuje hodnotu NULL ve více než jednom řádku. Podobně nelze vytvořit jedinečný index pro více sloupců, pokud kombinace sloupců obsahuje hodnotu NULL ve více než jednom řádku. Jedná se o duplicitní hodnoty pro účely indexování.
v tomto tématu
Než začnete:
Vytvoření jedinečného indexu v tabulce pomocí:
Než začnete
Výhody jedinečného indexu
Vícesloupcové jedinečné indexy zaručují, že každá kombinace hodnot v klíči indexu je jedinečná. Pokud je například vytvořen jedinečný index v kombinaci sloupců Příjmení, Jménoa Prostřední jméno, žádné dva řádky v tabulce nemohou mít stejnou kombinaci hodnot pro tyto sloupce.
Za předpokladu, že data v každém sloupci jsou jedinečná, můžete vytvořit jedinečný clusterovaný index i několik jedinečných neclusterovaných indexů ve stejné tabulce.
Jedinečné indexy zajišťují integritu dat definovaných sloupců.
Jedinečné indexy poskytují další informace užitečné pro optimalizátor dotazů, které můžou vytvářet efektivnější plány provádění.
Typické implementace
Jedinečné indexy jsou implementovány následujícími způsoby:
primární klíč nebo jedinečné omezení
Při vytváření omezení PRIMÁRNÍHO KLÍČE se automaticky vytvoří jedinečný clusterovaný index ve sloupci nebo sloupcích, pokud clusterovaný index v tabulce ještě neexistuje a nezadáte jedinečný neclusterovaný index. Sloupec primárního klíče nemůže povolit hodnoty NULL.
Když vytvoříte omezení UNIQUE, vytvoří se jedinečný neclusterovaný index, který ve výchozím nastavení vynucuje omezení UNIQUE. Jedinečný clusterovaný index můžete zadat, pokud clusterovaný index v tabulce ještě neexistuje.
Další informace najdete v tématu omezení jedinečnosti a kontrolní omezení a primární a cizí klíčové omezení.
Index nezávislý na omezení
V tabulce lze definovat více jedinečných neclusterovaných indexů.
Další informace naleznete v tématu CREATE INDEX (Transact-SQL).
Indexované zobrazení
Pokud chcete vytvořit indexované zobrazení, definuje se jedinečný clusterovaný index na jednom nebo více sloupcích zobrazení. Zobrazení se spustí a sada výsledků se uloží na úrovni listu indexu stejným způsobem jako data tabulky uložená v clusterovaném indexu. Další informace naleznete v tématu Vytvoření indexovaných zobrazení.
Omezení a restrikce
Jedinečný index, omezení UNIQUE nebo omezení PRIMÁRNÍHO KLÍČE nelze vytvořit, pokud v datech existují duplicitní hodnoty klíče.
Jedinečný neclusterovaný index může obsahovat zahrnuté sloupce bez klíče. Další informace najdete v tématu Vytvoření indexu se zahrnutými sloupci.
Bezpečnost
Dovolení
Vyžaduje oprávnění ALTER v tabulce nebo zobrazení. Uživatel musí být členem sysadmin pevné serverové role nebo db_ddladmin a db_owner pevných databázových rolí.
Použití aplikace SQL Server Management Studio
Vytvoření jedinečného indexu pomocí Návrháře tabulek
V Průzkumníku objektů rozbalte databázi obsahující tabulku, na které chcete vytvořit jedinečný index.
Rozbalte složku Tabulky.
Pravým tlačítkem myši klikněte na tabulku, na které chcete vytvořit jedinečný index, a vyberte Návrh.
V nabídce Návrhář tabulky vyberte Indexy/Klíče.
V dialogovém okně Indexy/Klíče klepněte na tlačítko Přidat.
Vyberte nový index v textovém poli Vybraný primární/jedinečný klíč nebo index.
V hlavní mřížce v části (Obecné)vyberte Typ a pak zvolte v seznamu Index.
Vyberte Sloupcea potom klikněte na tlačítko se třemi tečkami (...).
V dialogovém okně Indexovat sloupce, v oddílu Název sloupce, vyberte sloupce, které chcete indexovat. Můžete vybrat až 16 sloupců. Pro zajištění optimálního výkonu vyberte pouze jeden nebo dva sloupce na index. U každého vybraného sloupce určete, jestli index uspořádá hodnoty tohoto sloupce vzestupně nebo sestupně.
Pokud jsou vybrány všechny sloupce indexu, klepněte na tlačítko OK.
V mřížce v části (Obecné)vyberte možnost Je unikátní a pak v seznamu zvolte Ano.
Volitelné: V hlavní mřížce v části Návrhář tabulkyvyberte Ignorovat duplicitní klíče a pak v seznamu zvolte Ano. Tento postup proveďte, pokud chcete ignorovat pokusy o přidání dat, která by v jedinečném indexu vytvořila duplicitní klíč.
Klikněte na Zavřít.
V nabídce Soubor klepněte na tlačítko Uložittable_name.
Vytvoření jedinečného indexu pomocí Průzkumníka objektů
V Průzkumníku objektů rozbalte databázi obsahující tabulku, na které chcete vytvořit jedinečný index.
Rozbalte složku Tabulky.
Rozbalte tabulku, na které chcete vytvořit jedinečný index.
Klikněte pravým tlačítkem na složku Indexy, přejděte na Nový indexa vyberte Neskupený index....
V dialogovém okně Nový index zadejte na stránce Obecné název nového indexu do pole Název indexu.
Zaškrtněte políčko Jedinečné.
V části Sloupce indexového klíčeklikněte na Přidat....
V dialogovém okně Vybrat sloupce ztable_name zaškrtněte políčko nebo zaškrtávací políčka sloupce tabulky nebo sloupců, které se mají přidat do jedinečného indexu.
Klepněte na tlačítko OK.
V dialogovém okně Nový index klepněte na tlačítko OK.
Použití Transact-SQL
Vytvoření jedinečného indexu v tabulce
V Průzkumníku objektůse připojte k instanci databázového stroje.
Na panelu Standard klikněte na Nový dotaz.
Zkopírujte a vložte následující příklad do okna dotazu a klikněte na Spustit.
USE AdventureWorks2022; GO -- Find an existing index named AK_UnitMeasure_Name -- on the Production.UnitMeasure table and delete it if found. IF EXISTS (SELECT name from sys.indexes WHERE name = N'AK_UnitMeasure_Name' AND object_id = OBJECT_ID(N'Production.UnitMeasure', N'U')) DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure; GO -- Create a unique index called AK_UnitMeasure_Name -- on the Production.UnitMeasure table using the Name column. CREATE UNIQUE INDEX AK_UnitMeasure_Name ON Production.UnitMeasure (Name); GO
Další informace naleznete v tématu CREATE INDEX (Transact-SQL).