2011-05-17 50 views
0

我只是想知道是否有任何方法在agregate字段上創建索引?在彙總字段上的索引視圖

CREATE TABLE test2 (
id INTEGER, 
name VARCHAR(10), 
family VARCHAR(10), 
amount INTEGER) 

CREATE VIEW dbo.test2_v WITH SCHEMABINDING 
AS 
SELECT id, SUM(amount) as amount, COUNT_BIG(*) as tmp 
FROM dbo.test2 
GROUP BY id 

CREATE UNIQUE CLUSTERED INDEX vIdx ON test2_v(amount) 

我有這個代碼下一個錯誤信息:

,因爲索引鍵包含列 不能創建視圖「test.dbo.test2_v」 聚集索引 「VIDX」不在GROUP BY子句中。 考慮刪除 不在 索引關鍵字的GROUP BY子句中的列。

+0

正如我所見,這是不可能的http://msdn.microsoft.com/en-us/library/aa902643(SQL.80).aspx。 「視圖定義的語法有幾個限制,視圖定義不能包含以下內容:... SUM ...」 – demas 2011-05-17 11:45:51

回答

1

一在視圖上創建唯一聚集索引時的限制是。

如果視圖定義中包含 GROUP BY子句,則唯一 聚集索引的鍵只能引用在組指定的 列BY 子句。

http://msdn.microsoft.com/en-us/library/ms188783.aspx

所以,你首先需要在你的關鍵創建一個UNIQUE CLUSTERED索引,那麼你可以創建你的amountNONCLUSTERED指數。

CREATE UNIQUE CLUSTERED INDEX vIdx ON test2_v(id) 
CREATE NONCLUSTERED INDEX ix_test2_v_amount ON test2_v(amount) 
1

您的索引需要包含最有可能的ID。量不足夠獨特,要麼

按照錯誤消息

...索引鍵包含不在GROUP BY子句中的列....