以下可能嗎?我無法這樣做。我必須有一個永久表來創建索引嗎?sql server 2000 TSQL:在表變量上創建索引
declare @Beatles table
(
LastName varchar(20) ,
FirstName varchar(20)
)
CREATE CLUSTERED INDEX Index_Name_Clstd ON @Beatles(LastName)
以下可能嗎?我無法這樣做。我必須有一個永久表來創建索引嗎?sql server 2000 TSQL:在表變量上創建索引
declare @Beatles table
(
LastName varchar(20) ,
FirstName varchar(20)
)
CREATE CLUSTERED INDEX Index_Name_Clstd ON @Beatles(LastName)
不在一個表變量,但在一個臨時表中看到這個http://www.sqlteam.com/article/optimizing-performance-indexes-on-temp-tables
適用於**臨時表** - 但不適用於表變量! – 2009-12-17 17:53:28
marc我誤解了它,並且在你回覆時正在改變它.god這個網站非常快! – JonH 2009-12-17 17:54:09
@Jonh:
不,你不能在一個表變量創建指數 - 看到這個article here這posting here比較局部,全局臨時表的表變量。
限制
不能對錶變量創建一個非聚集 指數,除非 指數在桌子上 一個PRIMARY KEY或UNIQUE約束的副作用(SQL服務器使用 索引強制執行任何UNIQUE或 PRIMARY KEY約束)。
根據this post - 是的,你可以。 下面的聲明將產生2個索引:
DECLARE @Users TABLE
(
UserID INT PRIMARY KEY,
UserName VARCHAR(50),
FirstName VARCHAR(50),
UNIQUE (UserName,UserID)
)
第一索引將被聚集,並且將包括主鍵。 第二個索引將是非聚集的,並將包含唯一約束中列出的列。 這裏是另一篇文章,展示瞭如何強制查詢優化器使用動態生成的索引,因爲它往往會忽略它們(索引將在執行計劃評估後生成)
因此,如果我想優化就表格變量而言,我可以在表格定義中創建索引,如下所示? (20)NOT NULL主鍵集合, FirstName varchar(20)NOT NULL UNIQUE NONCLUSTERED); 從@Beatles中選擇姓氏 – 2009-12-17 19:26:08
您必須在臨時表格或常規表格上執行此操作。 – JonH 2009-12-18 18:11:25