我只是想知道是否有办法在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 :(得分: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)