SQL Server テーブル変数のインデックス
SQL Server 2014 以降では、インライン構文を使用してテーブル変数に直接インデックスを作成できます。例:
<code class="language-sql">DECLARE @T TABLE ( C1 INT INDEX IX1 CLUSTERED, C2 INT INDEX IX2 NONCLUSTERED, INDEX IX3 NONCLUSTERED(C1, C2), );</code>
対照的に、SQL Server 2000 ~ 2012 では、テーブル変数にインデックスを明示的に作成できません。ただし、暗黙的なインデックスは制約宣言を通じて作成できます。
SQL Server 2000 の Name 列のインデックスを作成します
次のテーブル変数宣言について考えてみましょう:
<code class="language-sql">DECLARE @TEMPTABLE TABLE ( [ID] [INT] NOT NULL PRIMARY KEY, [Name] [NVARCHAR] (255) COLLATE DATABASE_DEFAULT NULL, );</code>
名前列にインデックスを作成できますか?
はい、UNIQUE NONCLUSTERED
制約を使用して、Name 列にインデックスを作成できます。構文は次のとおりです:
<code class="language-sql">DECLARE @TEMPTABLE TABLE ( [ID] [INT] NOT NULL PRIMARY KEY, [Name] [NVARCHAR] (255) COLLATE DATABASE_DEFAULT NULL, UNIQUE NONCLUSTERED ([Name], [ID]), );</code>
テーブル変数のインデックスの実装
SQL Server の従来のテーブルは、クラスター化インデックスまたはヒープにすることができます。テーブル変数では、インデックスは制約を通じてのみ暗黙的に作成されます。これは、テーブル変数に対して作成できるインデックスの種類が制限されていることを意味します。
次の表は、さまざまな種類のインデックスと、それらのインデックスを SQL Server 2000 ~ 2012 のテーブル変数に作成できるかどうかをまとめたものです。
索引类型 | 表变量支持 |
---|---|
唯一聚集索引 | 是 |
非唯一聚集索引 | 否 |
堆上的唯一非聚集索引 | 是 |
堆上的非唯一非聚集索引 | 否 |
聚集索引上的唯一非聚集索引 | 是 |
聚集索引上的非唯一非聚集索引 | 是 |
ここに示した例では、Name 列の一意でない非クラスター化インデックスは、Name と ID に一意のインデックスを作成することによってシミュレートされています。これは、SQL Server がクラスター化インデックス キーを一意でないインデックス キーに暗黙的に追加するためです。
以上がSQL Server テーブル変数にインデックスを作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。