如何在 Create Table 中创建非聚集索引?
Posted
技术标签:
【中文标题】如何在 Create Table 中创建非聚集索引?【英文标题】:How to create nonclustered index in Create Table? 【发布时间】:2010-04-22 10:20:01 【问题描述】:Create table FavoriteDish
(
FavID int identity (1,1) primary key not null,
DishID int references Dishes(DishID) not null ,
CelebrityName nvarchar(100) nonclustered not null
)
这会导致
关键字“nonclustered”附近的语法不正确。
我参考了关于创建表语法的 MSDN 帮助。我不确定这里有什么问题。
【问题讨论】:
Create a nonclustered non-unique index within the CREATE TABLE statement with SQL Server的可能重复 @AaronLS 这个特定问题的第一个含义是比您所指的问题更早。这意味着您指向的那个可以称为这个的副本,反之亦然 【参考方案1】:在线书籍的帮助中确实提到了关键字 CLUSTERED,但它仅与 UNIQUE 或 PRIMARY KEY 约束相关。这两个约束都创建了一个索引,您可以指定该索引是集群的还是非集群的。
您不能使用该语法来创建标准的非聚集索引。
Create table FavoriteDish
(
FavID int identity (1,1) primary key not null,
DishID int references Dishes(DishID) not null ,
CelebrityName nvarchar(100) constraint ux_CelebrityName unique NONCLUSTERED not null
)
【讨论】:
啊哈,有道理。那么它应该是msdn上的一个子句。 不要忘记为索引添加正确的命名约定 PK_ 用于主键 UK_ 用于唯一键 IX_ 用于非聚集非唯一索引 UX_ 用于唯一索引 我所有的索引名称都采用 __删除这个非聚集关键字并使用 CREATE INDEX 语句为这个表添加索引,这个文档可以读入:
http://msdn.microsoft.com/en-us/library/ms188783.aspx
语法在这里:
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON <object> ( column [ ASC | DESC ] [ ,...n ] )
[ INCLUDE ( column_name [ ,...n ] ) ]
[ WHERE <filter_predicate> ]
[ WITH ( <relational_index_option> [ ,...n ] ) ]
[ ON partition_scheme_name ( column_name )
| filegroup_name
| default
]
[ FILESTREAM_ON filestream_filegroup_name | partition_scheme_name | "NULL" ]
[ ; ]
代码在这里:
CREATE NONCLUSTERED INDEX index_clustered ON FavoriteDish(CelebrityName asc)
【讨论】:
Svisstack,谢谢,我知道这一点,但我不能在 create table 语句中创建它。正如 Create Table 语法所说,可以使用 Create Table 语句创建 NON-UNIQUE NONCLUSTERED 索引 请看这里:***.com/questions/6193293/…以上是关于如何在 Create Table 中创建非聚集索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 中创建聚集索引,同时仍保留主键?