SQL Server - 如何查找是否存在聚簇索引

Con*_*ger 5 sql sql-server

我们有500多个表,想要确定哪些表没有主键.因为在大表上创建索引将有助于提高性能.

必需命令 - 识别HEAPS表(因为它们没有聚簇索引)

问候

Mar*_*ith 4

SELECT OBJECT_NAME(object_id)
FROM sys.indexes 
WHERE index_id=0 
  AND OBJECTPROPERTY(object_id, 'IsUserTable') = 1
Run Code Online (Sandbox Code Playgroud)

查找所有堆。不过,这个问题与 PK 是否存在是正交的。堆可以有非聚集 PK,聚集索引不一定是 PK。要查找没有 PK 的表,您可以使用。

SELECT *
FROM sys.tables t
WHERE NOT EXISTS
(
SELECT *
FROM sys.indexes i
WHERE is_primary_key=1 AND i.object_id = t.object_id
) 
Run Code Online (Sandbox Code Playgroud)