Tabulce bez clusterovaného indexu se říká heap (hromada), protože je to jen hromada neuspořádaných dat. Naopak tabulka s clusterovaným indexem je lépe strukturovaná do balanced tree. Primární klíč je sám o sobě clusterovaným indexem a měla by ho mít každá tabulka.
Optimalizovaná tabulka nebo dotaz uspořádaná do balanced tree daleko lépe v rámci datového modelu performuje při dotazech. Kromě zmíněného primární klíč také hlídá unikátnost záznamů. Výše zmíněné je důležité pro správné fungování datového skladu.
Jak najít seznam tabulek bez primárního klíče?
K tomu využijeme systémových tabulek. Seznam indexů se ukrývá v tabulce sys.indexes a seznam tabulek zase v sys.tables. Obě tabulky lze propojit přes atribut object_id.
SELECT
[Tab].[name] AS [Tabulka]
FROM sys.tables [tab]
LEFT JOIN sys.indexes [ind]
ON [tab].[object_id] = [ind].[object_id]
WHERE [ind].[is_primary_key] <> 1
Tabulka sys.indexes má atribut is_primary_key, takže po propojení si můžeme zobrazit tabulky, u kterých se nenachází v tabulce indexů žádný index typu primární klíč. Podobným způsobem lze zobrazi tabulky které mají/nemají CLUSTERED/NONCLUSTERED index a podobně.
Pokud by nás zajímalo v jakém stavu jsou naše indexy z pohledu fragmentace, tak tato indormace se zase nachází v tabulce sys.dm_db_index_physical_stats. Skript, který vyhledá fragmentované indexy a opravíá je najdete v článku – SQL Automatická oprava indexů v SQL Server + skript