创建带有索引的视图
我想创建一个视图,它将显示与其查询的表相同的属性
CREATE VIEW Agent_View
AS
SELECT * FROM Agent_table
我想知道是否需要创建与 Agent_View 中的 Agent_table 相同的索引> 也。
我是否需要将 Agent_View 声明为 schemabound 才能创建索引。是否有任何解决方法可以在不声明为 schemabound 的情况下创建索引?
I wanted to create a view, that will exhibit the same property as the table it queries from
CREATE VIEW Agent_View
AS
SELECT * FROM Agent_table
I want to know if I need to create the same indexes as the Agent_table in the Agent_View also.
Do I need to declare the Agent_View as schemabound to create index. Is there any workaround to create indexes without declaring as schemabound ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您无法使用
SELECT *
在视图上创建索引,因为您无法使用WITH SCHEMABINDING
没有索引的视图只是一个扩展到外部查询的宏。所以无论如何都会使用表索引。从架构角度来看,该视图不存在。
最后,恕我直言,这可能是视图的最无意义的使用。它增加了零值。
You can't create indexes on the view with
SELECT *
because you can't haveWITH SCHEMABINDING
A view without indexes is just a macro that expands into the outer query anyway. So table indexes will be used anyway. The view doesn't exist from a schema perspective.
Finally, IMHO this is possibly the most pointless use of a view possible. It adds zero value.
大多数(如果不是全部)针对此视图的查询的行为就像直接使用底层表一样。
因此,如果您在
agent_table
中对agent_name
建立索引,并执行如下查询:...它将被优化器重写为:
是否使用索引是另一个问题问题。
Most (if not all) queries against this view will behave as if you used the underlaying table directly.
Thus if you indexed
agent_name
inagent_table
, and performed a query like:...it would be rewritten by the optimizer to:
Whether the index would be used or not is another question.
如果您有任何复杂的查询,您可能需要创建索引视图,但在您的情况下将使用表的索引。
MSDN 参考
You may want to create indexed views if you have any complex queries, but in your case the table's indexes will be used.
MSDN reference