我想创建一个视图,它将显示与它从
查询的表相同的属性CREATE VIEW Agent_View
AS
SELECT * FROM Agent_table
我想知道是否需要在 Agent_View 中创建与 Agent_table 相同的索引。
我是否需要将 Agent_View 声明为schemabound以创建索引。是否有任何解决方法来创建索引而不声明为schemabound?
答案 0 :(得分:3)
您无法使用SELECT *
在视图上创建索引,因为您无法WITH SCHEMABINDING
没有索引的视图只是一个宏,无论如何都会扩展到外部查询中。因此无论如何都将使用表索引。从架构的角度来看,该视图不存在。
最后,恕我直言,这可能是对观点最无意义的使用。它增加了零值。
答案 1 :(得分:2)
针对此视图的大多数(如果不是全部)查询的行为就像您直接使用了底层表一样。
因此,如果您在agent_name
中编入了agent_table
,并执行了以下查询:
select *
from agent_view
where agent_name = 'James Bond';
......优化器会将其重写为:
select *
from agent_table
where agent_name = 'James Bond';
是否使用索引是另一个问题。
答案 2 :(得分:1)
如果您有任何复杂的查询,您可能想要创建索引视图,但在您的情况下,将使用表的索引。