首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在表变量上创建索引

在表变量上创建索引
EN

Stack Overflow用户
提问于 2009-05-20 03:46:17
回答 1查看 372.3K关注 0票数 221

您是否可以在SQL Server2000中为表变量创建索引?

代码语言:javascript
复制
DECLARE @TEMPTABLE TABLE (
     [ID] [int] NOT NULL PRIMARY KEY
    ,[Name] [nvarchar] (255) COLLATE DATABASE_DEFAULT NULL 
)

我是否可以在Name上创建索引

EN

回答 1

Stack Overflow用户

发布于 2016-06-14 23:58:12

应该理解的是,从性能的角度来看,@temp表和#temp表之间没有区别,它们更倾向于变量。它们驻留在同一位置(tempdb),并且以相同的方式实现。所有的不同之处都体现在附加功能上。看看这篇令人惊叹的完整文章:https://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server/16386#16386

尽管在某些情况下不能使用临时表,例如在表或标量函数中,但对于v2016之前的大多数其他情况(甚至可以将过滤后的索引添加到表变量),您可以简单地使用#temp表。

在tempdb中使用命名索引(或约束)的缺点是名称可能会冲突。不仅在理论上使用其他过程,而且通常很容易使用过程本身的其他实例,这些实例将尝试将相同的索引放在它的#temp表的副本上。

为了避免名称冲突,通常可以使用下面这样的代码:

代码语言:javascript
复制
declare @cmd varchar(500)='CREATE NONCLUSTERED INDEX [ix_temp'+cast(newid() as varchar(40))+'] ON #temp (NonUniqueIndexNeeded);';
exec (@cmd);

这确保了名称始终是唯一的,即使在同一过程的同时执行之间也是如此。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/886050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档