我编写了一个创建一些表的脚本(如果它们存在,它会先删除它们),然后尝试在每个表上创建两个索引。
第一个索引使用“主键”列创建非聚集索引,第二个索引使用另一个列创建聚簇索引。这是因为主键列是GUID而不是int。
如果我不知道它的名字,我如何删除默认索引?或者我如何指定主键列索引的名称,以便我可以删除它?或者更好的是,如何在Create Table语句中指定我需要的2索引?
答案 0 :(得分:3)
SELECT * FROM sys.indexes
但是,我不了解您的流程中实际上必须删除索引的位置。
你说你正在创建一些表,然后在每个表上创建两个索引。
如果您在开始时删除现有表,则会自动删除所有索引。
没有默认索引。
表可以是堆或聚簇索引。如果删除聚簇索引,则表将转换为堆,并且必须更新任何非聚簇索引以指向无序堆中的数据。
您可以一次性创建:
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
答案 1 :(得分:3)
您可以在创建表格后立即定义两个索引:
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)
这应该在单独的列上创建非群集主键和单独的(最好是唯一的)聚簇索引。