-1

いくつかのテーブルを作成し(以前はそれらが存在する場合は削除します)、各テーブルに2つのインデックスを作成しようとするスクリプトを作成しました。

最初のインデックスは主キー列を使用して非クラスター化インデックスを作成し、2番目のインデックスは別の列を使用してクラスター化インデックスを作成します。これは、主キー列がintではなくGUIDであるためです。

名前がわからない場合、デフォルトのインデックスを削除するにはどうすればよいですか?または、ドロップできるように主キー列インデックスの名前を指定するにはどうすればよいですか?または、さらに良いことに、Create Tableステートメントで必要な2つのインデックスを指定するにはどうすればよいですか?

4

2 に答える 2

3
SELECT * FROM sys.indexes

ただし、プロセスのどこで実際にインデックスを削除する必要があるのか​​わかりません。

いくつかのテーブルを作成してから、各テーブルに2つのインデックスを作成するとおっしゃいました。

最初に既存のテーブルを削除する場合、すべてのインデックスは自動的に削除されます。

デフォルトのインデックスなどはありません。

テーブルは、ヒープまたはクラスター化インデックスのいずれかです。クラスタ化インデックスを削除すると、テーブルはヒープに変換され、非クラスタ化インデックスは、順序付けされていないヒープ内のデータを指すように更新する必要があります。

このように一度に作成できます。

CREATE TABLE dbo.tbl
(
    Id int NOT NULL IDENTITY (1, 1) CONSTRAINT UK_ID UNIQUE CLUSTERED,
    SomeUUID UNIQUEIDENTIFIER NOT NULL CONSTRAINT PK_SomeUUID PRIMARY KEY NONCLUSTERED
)

SQLFiddleは次のとおりです:http ://sqlfiddle.com/#!6 / d759e / 12

于 2012-07-23T20:45:27.597 に答える
3

テーブルを作成した直後に、2つのインデックスを定義できます。

CREATE TABLE dbo.YourTable ( ...... )
GO

ALTER TABLE dbo.YourTable
ADD CONSTRAINT PK_YourTable PRIMARY KEY NONCLUSTERED (YourGuidColumn)
                                      ****************
                  this is crucial ! Otherwise, your PK will be clustered!


CREATE CLUSTERED INDEX IX01_YourTable ON dbo.YourTable(YourOtherColumn)

or even better:  
CREATE UNIQUE CLUSTERED INDEX IX01_YourTable ON dbo.YourTable(YourOtherColumn)

これにより、クラスター化されていない主キーと、別の(できれば一意の)クラスター化インデックスが別の列に作成されます。

于 2012-07-23T20:56:51.627 に答える