クラスター化インデックスが作成されていないテーブルを一覧する(SQL Azure)

ネタ元:SQL Azure Team Blog: Finding Your Clustered Indexes
http://blogs.msdn.com/b/sqlazure/archive/2010/06/02/10018878.aspx


SQL Azure では、クラスター化インデックスが必須なので、クラスター化インデックスが設定されていないテーブルを一覧するスクリプトです。

USE データベース名

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

indexes システム ビューは、データベース内のすべてのインデックス情報を参照できるビューです。WHERE 句の「index_id = 0」によって、ヒープクラスター化インデックスが作成されていないテーブルのデータ格納状態。クラスター化インデックスが作成されている場合は index_id = 1 となる)を取得できます。
object_id には、テーブルのオブジェクトID が格納されているので、OBJECT_NAME 関数でテーブル名を取得、OBJECTPROPERTY 関数IsUserTable(ユーザー テーブル)かどうかをチェックしています(1 ならユーザー テーブル、0 ならシステム テーブル)。


自習書でお馴染みの NorthwindJ データベースに対して実行した場合は、次のようになります。

都道府県テーブルには、クラスター化インデックスが設定されていないので、これをリストアップしてくれます。