【发布时间】:2012-03-01 05:57:20
【问题描述】:
我正在尝试在 SQL Server 中创建索引视图,我想知道是否需要索引视图列。
我之所以这么问,是因为视图是由一个已经索引列的表组成的。
所以如果TABLE1 的列FOO 已经被索引为非聚集索引,我是否必须将列FOO 的索引添加到新创建的视图中,以便SQL Server 使用该索引?
或者 SQL Server 在搜索视图时会知道使用 TABLE1 中的索引吗?
视图是这样的
CREATE VIEW [dbo].[v_eventActivity]
WITH SCHEMABINDING
AS
SELECT ea.id,
e.eventID,
e.name,
ea.userID,
ea.activityTypeID,
ea.timeStamp,
ea.visitDuration
FROM dbo.table1 e,
dbo.table2 ea
WHERE e.eventID = ea.eventID
我将一起搜索所有这些列。
如前所述,table1 和 table2 都已经为这些列建立了索引。
【问题讨论】:
-
我以为我知道这个问题的答案,但在书面上它确定事实上我不知道。好Q!最好的了解方法可能是尝试并查看。你也应该指定什么 SS 版本。
-
通常索引视图并不代表整个表,因此在特定列上表示索引通常没有意义。你创建视图了吗?你能分享一下表结构、你说的索引以及视图的定义(包括它的索引)吗?
-
我确实试过了。查询执行计划说它确实使用了原始表的索引。但我只是想确定一下。
-
执行计划会知道 ;)
-
@Yuck 好吧,我开始回答,但意识到优化器可以机会主义地使用索引视图索引,所以它可能也可以用于表,但后来我意识到我不确定所以希望亚伦或聪明的人会回答。
标签: sql-server database search indexing views