聚合字段的索引视图

时间:2011-05-17 11:38:20

标签: sql-server

我只是想知道是否有办法在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子句中   索引键。

2 个答案:

答案 0 :(得分:1)

您的索引最有可能包含ID。金额也不够独特

根据错误消息

  

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

答案 1 :(得分:1)

在视图上创建唯一聚簇索引时的一个限制是。

  

如果视图定义包含   GROUP BY子句,唯一的关键   聚簇索引只能引用   GROUP BY中指定的列   子句。

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

首先,您需要在密钥上创建UNIQUE CLUSTERED索引,然后才能在NONCLUSTERED列上创建amount索引。

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