sql server 2000 TSQL:在表变量上创建索引

时间:2009-12-17 17:47:55

标签: sql-server tsql sql-server-2000

以下可能吗?我无法这样做。我是否必须有一个永久表来创建索引?

declare @Beatles table
    (
        LastName varchar(20) ,      
        FirstName varchar(20) 
    )

CREATE CLUSTERED INDEX Index_Name_Clstd ON @Beatles(LastName)

3 个答案:

答案 0 :(得分:2)

不是在表变量上,而是在临时表上,请参阅此http://www.sqlteam.com/article/optimizing-performance-indexes-on-temp-tables

答案 1 :(得分:2)

不,您无法在表变量上创建索引 - 请参阅此article here和此posting here将本地全局临时表与表变量进行比较。

  

<强>限制

     

您无法创建非群集   表变量的索引,除非   index是PRIMARY的副作用   表上的KEY或UNIQUE约束   (SQL Server强制执行任何UNIQUE或   使用一个主要的约束约束   索引)。

答案 2 :(得分:1)

根据this post - 是的,你可以。 以下声明将生成2个索引:

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

第一个索引将被群集,并将包含主键。 第二个索引将是非聚集的,并将包含唯一约束中列出的列。 这是另一篇文章,展示了如何强制查询优化器使用动态生成的索引,因为它会忽略它们(索引将在评估执行计划后生成)