临时表内联索引UNIQUE CLUSTERED与NON-UNIQUE NONCLUSTERED,以及命名要求

问题描述 投票:0回答:1

我发现创建 UNIQUE CLUSTERED 索引时,我不必指定名称:

CREATE TABLE [#TEMP01]
(
    [TradeDate] DATE NOT NULL
        UNIQUE CLUSTERED([TradeDate])
);

我认为 SQL Server 正在内部为上述索引生成一个名称。

当我尝试创建

NONUNIQUE
/
NONCLUSTERED
索引时,我不得不提供一个名称:

CREATE TABLE [#TEMP02]
(
    [TradeDate] DATE NOT NULL
        INDEX [IX_TradeDate] NONCLUSTERED([TradeDate])
);

我可以创建非唯一内联索引而无需提供名称吗?

sql-server indexing temp-tables
1个回答
0
投票

不,你不能。

内联索引的语法定义您必须提供名称

<column_index> ::=
 INDEX index_name [ CLUSTERED | NONCLUSTERED ]
    [ WITH ( <index_option> [ ,... n ] ) ]
    .....

对于表级索引(可能是多列):

<table_index> ::=
{
    {
      INDEX index_name  [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]
         ( column_name [ ASC | DESC ] [ ,... n ] )
    | INDEX index_name CLUSTERED COLUMNSTORE
    | INDEX index_name [ NONCLUSTERED ] COLUMNSTORE ( column_name [ ,... n ] )
    }
    [ INCLUDE ( column_name [ ,... n ] ) ]
    ....

您最初提到的不是唯一聚集索引,而是唯一聚集约束。确实可以在不提供名称的情况下定义约束,但建议您指定一个名称。这两者之间的主要区别在于索引可以有

INCLUDE
列和
WHERE
过滤器,而约束则不能。两者都可以用作外键的目标。

© www.soinside.com 2019 - 2024. All rights reserved.