SQL Server 视图到底怎么用?我用了怎么没有任何性能的提升!!!!!
我用SQL Server 2005工具在数据库里手动创建了一个视图View1
里面的生成的SQL语句如下
SELECT TOP (100) PERCENT WITH TIES dbo.info.id, dbo.info.uid, dbo.info.pdname, dbo.info.area,
dbo.info.tg, dbo.user.lxr, dbo.user.tel, dbo.user.mobile_no, dbo.info.addtime
FROM dbo.info INNER JOIN
dbo.user ON dbo.info.uid = dbo.user.uid
WHERE (dbo.info.tg = 1)
ORDER BY dbo.info.addtime DESC
然后
我用Select * from view1来调用这个视图执行效率和不使用视图差不多,是不是视图不是这样用的?请高手指点!
------解决方案--------------------视图本身不会提高程序执行效率的啊,又不预编译.SQL2005的视图应该也同样.
------解决方案--------------------视图可以被看成是虚拟表或存储查询。可通过视图访问的数据不作为独特的对象存储在数据库内。数据库内存储的是 SELECT 语句。SELECT 语句的结果集构成视图所返回的虚拟表。用户可以用引用表时所使用的方法,在 Transact-SQL 语句中通过引用视图名称来使用虚拟表。使用视图可以实现下列任一或所有功能:
将用户限定在表中的特定行上。
例如,只允许雇员看见工作跟踪表内记录其工作的行。
将用户限定在特定列上。
例如,对于那些不负责处理工资单的雇员,只允许他们看见雇员表中的姓名列、办公室列、工作电话列和部门列,而不能看见任何包含工资信息或个人信息的列。
将多个表中的列联接起来,使它们看起来象一个表。
------解决方案--------------------视图不会对性能提升有什么帮助的,考虑性能因素的话,应该选择存储过程。
视图只不过是存储在sql server上的select语句罢了,当对视图请求时,sql server会像执行一句普通的select语句那样的执行视图的select语句,它的性能并不像人们想象得那么出色。
而存储过程在编译后可以生成执行计划,这使得每次执行存储过程的时候效率将会更高,这是存储过程,另外台提交参数的时候,使用存储过程将会减少网络带宽流量,这是存储过程相对于普通的sql语句在性能上的最大的优势。
当然,从sql server2000/7.0版本开始普通的sql查询在执行后,它的执行计划将会被放入缓存中,以便下次执行的时候能够获得较高的性能,但是很久不使用的查询计划将会从高速缓存清理出去。
总之,从性能上来说存储过程要优于视图。
请参考:
http://community.csdn.net/Expert/topic/5296/5296750.xml?temp=.5830652
------解决方案--------------------为视图创建聚簇索引,只有这样才会显著地提高系统的性能。当在视图上创建了聚簇索引后,视图的结果集与有聚簇索引的表的数据集一样是存储在数据中的。
------解决方案--------------------1 先分析目前的sql语句,查看执行计划,看看瓶颈在那里,是否可以通过基表的索引更改来提高效率(可能性比较大)
2 如果1方法效果不明显,那最好建立索引视图,然后再看看select语句的执行计划是否使用了索引