2011-09-28 15 views
5

500以上のテーブルがあり、どのテーブルにプライマリキーがないのかを特定したい。大きなテーブルにインデックスを作成すると、パフォーマンスが向上します。SQL Server - クラスタ化インデックスが存在するかどうかを調べる方法

必要なコマンド - (彼らはクラスタ化インデックスを持っていけないよう)HEAPSである

よろしく

+0

「PK」は、「CLUSTERED」または「NON-CLUSTERED」のユニークなインデックスです。したがって、PKでテーブルを作成することはできますが、クラスタードインデックスは使用できません。 –

答えて

4
SELECT OBJECT_NAME(object_id) 
FROM sys.indexes 
WHERE index_id=0 
    AND OBJECTPROPERTY(object_id, 'IsUserTable') = 1 

をテーブルを識別するためには、すべてのヒープを検索します。この問題は、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 
) 
関連する問題