如何在表变量中的列上创建索引

时间:2012-01-26 16:21:52

标签: sql-server-2008

假设我声明了一个包含一些列的表变量。

声明@MyContacts表(

//其中的列定义

);

假设我有一个columnA,我如何在SQL Server 2008中对其进行索引。

4 个答案:

答案 0 :(得分:5)

如果你有一个足够大的表需要索引,不要在表变量中执行,在临时表中执行它!

表变量有各种限制,包括:

  • 无统计信息 - 优化程序始终假定它们只有一行
  • 没有非聚集索引(除了约束)
  • 在直接范围之外没有可见性 - 子进程无法访问您的表变量。
  • 在交易范围之外 - 您不能ROLLBACK对表变量做任何事情,因为它没有记录在事务日志中

如果您有足够大的东西需要索引,请将其放在临时表中。

答案 1 :(得分:3)

通过定义主键并创建唯一约束,可以在表变量的声明中隐式地创建表变量的索引。主键表示聚簇索引,而唯一约束表示非聚簇索引。

DECLARE @Users TABLE
(
    UserID  INT PRIMARY KEY,
    UserName varchar(50),
    UNIQUE (UserName)
)

有关详细信息,请查看THIS文章。

答案 2 :(得分:1)

declare @YourTempTable table
( 
    ID int not null primary key,
    Name nvarchar(255) null
) 

答案 3 :(得分:1)

您可以将其与列定义一起指定;

declare @MyContacts table (columnA int unique nonclustered ...)