2011-02-23 51 views
1

只是想检查一下,如果我们能够在用户定义的表变量上创建索引。我知道我们可以在UDT上创建PK。这是否意味着PK在内部创建(聚集)索引?如果UDT上的列上有可能存在索引,那么索引数据的存储位置是什么?我可以在用户定义的表变量上创建索引吗?

+0

您是指用户定义表类型还是表变量? (它不会改变很多答案,只是要链接到正确的MSDN页面是不同的: - |) – 2011-02-23 13:39:04

+0

表变量 – user203687 2011-02-23 15:20:31

回答

3

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

您无法在这些表上定义任意索引。

0

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

4

要定义表变量的索引,请使用primary keyunique约束条件。你可以提名一个聚类。

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

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

事情是这样的:

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

现在你有一个非唯一字段VAL1一个聚集索引的表变量。

相关问题