我可以在用户定义的表变量上创建索引吗?

时间:2011-02-23 13:14:26

标签: tsql

只是想检查一下,如果我们能够在用户定义的表变量上创建索引。我知道我们可以在UDT上创建PK。是否暗示PK在内部创建(聚集)索引?如果UDT上的列上可以有索引,那么索引数据将存储在哪里?

3 个答案:

答案 0 :(得分:4)

要在表变量上定义索引,请使用primary keyunique约束。您可以指定一个为群集。

  • 如果您需要非唯一字段的索引,只需将唯一键添加到索引列列表的末尾,以使其唯一。

  • 如果表变量没有唯一字段,请使用标识列添加虚拟唯一字段。

这样的事情:

declare @t table (
    dummy identity primary key nonclustered,
    val1 nvarchar(50),
    val2 nvarchar(50),
    unique clustered (val1, dummy)
) 

现在你有一个表变量,在非唯一字段val1上有一个聚簇索引。

答案 1 :(得分:3)

使用表变量,您可以定义primary key and unique constraints,但无法定义 任何聚类行为。这些索引与表变量中的实际数据一起存储 - 希望在tempdb内存中,但如果需要,如果内存压力很高,则溢出到磁盘。

您无法在此类表上定义任意索引。

答案 2 :(得分:0)

但是,您可以在临时表上定义所需的索引。