只是想检查一下,如果我们能够在用户定义的表变量上创建索引。我知道我们可以在UDT上创建PK。是否暗示PK在内部创建(聚集)索引?如果UDT上的列上可以有索引,那么索引数据将存储在哪里?
答案 0 :(得分:4)
要在表变量上定义索引,请使用primary key
或unique
约束。您可以指定一个为群集。
如果您需要非唯一字段的索引,只需将唯一键添加到索引列列表的末尾,以使其唯一。
如果表变量没有唯一字段,请使用标识列添加虚拟唯一字段。
这样的事情:
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)
但是,您可以在临时表上定义所需的索引。