てぃぐれのプログラマwiki

ワクワクに従う

一意制約とインデックス自動作成【SQLServer】

経緯

最近、プロジェクトでSQLServerを使用し、設計を行っている。

Oracleでは一意制約をかけると一意索引が自動で作成されていたが、SqlServerではどうだろうか。

 

調査結果

「制約に依存しない一意インデックスを作成することの間に大きな違いはありません。」とある。

Unique インデックスの作成 - SQL Server | Microsoft Docs

つまり、SqlServerでも一意制約を作成すると一意索引が作成されるということなのであろう。

 

実際にやってみる

まずuniqueTテーブルを作成する

まだindexはない

SQL 複合ユニーク制約追加
ALTER TABLE uniqueT ADD CONSTRAINT testU
    UNIQUE ( xid,yid );

Indexが追加されている

■Index取得SQL

SQL Server: データベース内の全てのインデックス (index) を取得する - 便利なT-SQL&クエリー集 - SQL Server 入門

SELECT  S.name AS SchemaName,
    O.name AS ObjectName,
    I.name AS IndexName,
    I.type_desc AS IndexTypeDesc,
    I.is_primary_key AS IsPrimaryKey,
    I.is_unique AS IsUnique,
    I.is_disabled AS IsDisabled
FROM    sys.indexes AS I
       INNER JOIN sys.objects AS O
          ON I.object_id = O.object_id
       INNER JOIN sys.schemas AS S
          ON O.schema_id = S.schema_id
WHERE   I.index_id > 0
    AND O.is_ms_shipped = 0
    and O.name= 'uniqueT'
ORDER BY S.name,
     O.name,
     I.name;