以下可能吗?我无法这样做。我是否必须有一个永久表来创建索引?
declare @Beatles table
(
LastName varchar(20) ,
FirstName varchar(20)
)
CREATE CLUSTERED INDEX Index_Name_Clstd ON @Beatles(LastName)
答案 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)
)
第一个索引将被群集,并将包含主键。 第二个索引将是非聚集的,并将包含唯一约束中列出的列。 这是另一篇文章,展示了如何强制查询优化器使用动态生成的索引,因为它会忽略它们(索引将在评估执行计划后生成)