今天遇到一个需求,需要将现有的普通视图进行性能优化,首当其冲的我想到了Oracle的物化视图,讲真好用,但问题是SQL Server好像没有这个玩意,经过网上的搜索SQL Server可以建立带索引的视图,于是我进行了尝试。

首先索引视图的写法,就是在普通建视图后面增加 with schemabinding 标记,用途是将该视图绑定到数据库架构上。

create view [V_viewname] with schemabinding
as
....

这样建视图需要注意的事项:

1、select语句中所有的表名必须使用“dbo.表名”来写。

2、select语句中不能带有*号。(也就是不能select * from dbo.table)

3、语句中不允许有跨库的表查询。

如语句中有上述情况则执行时会遇下面的错误。

消息 4512,级别 16,状态 3,过程 V_产品配送,第 4 行
无法将 视图’dbo.V_产品配送’ 绑定到架构,因为名称 ‘Sales.dbo.Task’ 对于架构绑定无效。名称必须由两部分构成,并且对象不能引用自身。

最后就给对应的视图加入索引了。用SQL管理器按下图添加或者自行写create index语句。

对于大数据表会有一些效果,不过最根本的还是多花些时间处理SQL本身性能。