9

ええ、これ複製です。しかし、 Pinal Daveによるこの記事について、次のように説明する必要があります。

シナリオ 4: 主キーはデフォルトでクラスター化インデックスになり、他のインデックスはデフォルトで非クラスター化インデックスになります

この場合、両方のテーブルに 2 つのインデックスを作成しますが、列のインデックスのタイプは指定しません。結果を確認すると、主キーが自動的にクラスター化インデックスにデフォルト設定され、別の列が非クラスター化インデックスに設定されていることがわかります。

-- Case 4 Primary Key and Defaults
USE TempDB
GO
-- Create table
CREATE TABLE TestTable
(ID INT NOT NULL PRIMARY KEY,
Col1 INT NOT NULL UNIQUE)
GO
-- Check Indexes
SELECT OBJECT_NAME(OBJECT_ID) TableObject,
[name] IndexName,
[Type_Desc]
FROM sys.indexes
WHERE OBJECT_NAME(OBJECT_ID) = 'TestTable'
GO
-- Clean up
DROP TABLE TestTable
GO
4

2 に答える 2

2

簡単に説明すると、Pinal Dave の例の Result は、次のようなインデックスです。

TestTable   PK__TestTabl__3214EC2703317E3D  CLUSTERED
TestTable   UQ__TestTabl__A259EE55060DEAE8  NONCLUSTERED

これは次のように説明できます。

PK クラスタ化

テーブルが主キーで作成された場合、それはクラスター化テーブルであり、特に指定しない限り、クラスター化インデックスはデフォルトで主キーに設定されます。(クラスター化インデックスのないテーブルはヒープです)

UQ ノンクラスタード

SQL は通常、デフォルトではテーブルに非クラスター化インデックスを作成しません。

ただし、Marc が指摘したように、テーブルにはUNIQUE制約のある列があるため(Col1 INT NOT NULL UNIQUE)、MS SQLはその列に一意の非クラスター化インデックスとして制約を実装します。

参照: Sql サーバーの一意のキーもインデックスですか?

于 2013-05-25T10:44:49.527 に答える