在上一篇文章,我们讲解了SQL Server中视图的一些特点与优化。本章我们讲解SQL Server中另一种特殊的视图--
索引视图。
关于普通视图的创建与操作,请参看本站:
SQL Server中视图的特点与优化在上述的文章中我们讲到,SQL SERVER视图其实就是一段SQL语句,在视图被调用时动态执行定义的SQL,返回结果集。
在SQL Server2005后,微软推出了索引视图,索引视图与之前的普通视图有一个本质的区别,就是索引视图中的结果集是保存在数据库中的,而不是每次动态执行的结果。这样,查询时就可以像查询基础表一样,性能得到不少的提升。我们还可以在索引视图上创建索引,让索引视图的性能得到进一步提升。
那么,要如何建创索引视图呢?我们可以通过关键字SchemaBinding来创建,例句如下:
create view v_salary with Schemabinding as
select name,salary from dbo.Salary
在创建索引视图的时候,我们要注意以下几点:
1,在索引视图中,不能使用*号,必具指定所有结果集中的列名。我们试图在其实使用*号:
create view v_ss_salary with Schemabinding as
select * from dbo.Salary
报错:在绑定到架构的对象中不允许使用语法 '*'。
2,在索引视图中,所有用到的表前都必须加表所属的架构dbo。我们试图在表前不加dbo:
create view v_salary with Schemabinding as
select name,salary from Salary
报错:无法将 视图'v_salary' 绑定到架构,因为名称'Salary'对于架构绑定无效。名称必须由两部分构成,并且对象不能引用自身。
3,
在索引视图中不能有重复的列(其实在普通视图中也有该限制)
我们试图在视图中创建重复的列:
create view v_salary with Schemabinding as
select name,name from dbo.Salary
报错:各视图或函数中的列名必须唯一。在视图或函数 'v_salary ' 中多次指定了列名 'name'。
4,
在索引视图中只能创建唯一聚集索引。
我们试图在索引视图上创建聚集索引:
create clustered index IX_name on v_salary(name)
报错:无法对视图'v_salary'创建索引,它没有唯一聚集索引
正确的创建语句如下:
create unique clustered index IX_name on v_salary(name)
假设v_salary是普通视图,如果我们为它创建索引,会报如下错误:
无法对视图v_salary创建索引,因为该视图未绑定到架构
删除索引视图:
·删除索引视图的方法与删除普通视图的方法一样,在SQL Server Management Studio中,选中要删除的视图,点击右键菜单中的"删除"命令即可。
·使用SQL语句删除方法如下:
drop view 视图名