数据库中建多个视图有啥弊端吗?
比如索引是以消耗磁盘空间为代价 那视图呢?
------解决方案--------------------DB对象几乎都会“耗磁盘空间”,包括视图
而对于索引,在提高检索性能的同时,以牺牲insert/update/delete的性能为主要代价吧
------解决方案--------------------视图在数据库上只保存视图的定义,开销是比较小的。当然视图物化以后,开销就会比较大
------解决方案--------------------索引才能消耗多少磁盘空间
这些东西你要熟悉他的概念和用法
注意select 字句中不能使用COMPUTE 或 COMPUTE BY 子句
ORDER BY 必须和TOP 一起使用
特别是05 08中
TOP 100 PERCENT ....ORDER BY col
被忽略了效果,就是说不能用这种方法去实现对视图返回行排序
------解决方案--------------------视图当然根据你的需要和项目架构来确定哪些建立哪些不建立
有的项目会喜欢查询都写到视图里面,有的整个项目没有一个视图。
------解决方案--------------------个人感觉视图屏蔽了一部分表之间的关系,别的也没啥
不喜欢用视图,还是直接对表操作比较直接。
------解决方案--------------------1)性能差
sql server必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,sql server也要把它变成一个复杂的结合体,需要花费一定的时间。
2)修改限制
当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的试图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。
------解决方案--------------------主要作用是不让所有的人都能看到整张表。比如有个员工信息表,里面有联系方式,薪资等,可能只希望HR能看到薪资,其他人只能看到联系方式,那么就可以使用视图来实现
可以方便的实现一些复杂的带有带表达式的视图,多用于报表
------解决方案--------------------视图比较建议用于安全性考虑,而不是性能上的考虑,从性能上来说,直接操作实体表更加快。这是经过实践得出来的。视图主要是展示数据的时候,把一些不必要展示的部分过滤掉,此时比较有效。
------解决方案--------------------使用视图性能比直接用原是表要稍微查一点点,仅仅是一点点,我个人感觉可以忽略不计,
普通视图对磁盘空间的消耗?忽略不计吧,都不是重点
而索引视图是用来提升查询性能的,增加了修改数据时的开销,也增加了磁盘开销
------解决方案--------------------使用视图首先可以简化查询代码,其次过滤不需要的信息,视图只是逻辑上存在的一张表,所以会有update限制,不能直接对视图进行更新操作。
from:baidu.baike
视图的优点
一,视图着重于特定数据。 视图可以让用户或者程序开发人员只看到他们所需要的数据,而不需要把表中的所有信息与字段暴露出来,这样增强了数据的安全性。 二,简化数据的操作,易维护。 我们可以将经常用到的多表联合查询出来的数据,或特定的结果集定义为视图,这样就起到了模块化数据的作用。我们在使用这些数据时直接查询该视图就可以,而不用到处写长长的SQL语句,这样也起到易维护的作用。 三,视图可以限定查询数据。 比如:对于不同的用户,我们只提供部分数据给他。这样,我们就可以在视图中限定结果集,然后返回该视图给他。这样,无论用户怎么对视图定义查询条件,他也不能查询出我们不想提供给他的数据。
视图的缺点
虽然视图可以给我们带来种种便利,但不意味着我们就可以滥用它。因为视图其实就是一段SQL语句,所以它的结果都是每次调用时动态生成的。如果不合理的定义视图,必然带来性能上的损耗。 下面是我们在创建视图应该要注意的几点: 一,操作视图会比直接操作基础表要慢,所以我们尽量避免在大型表上创建视图。 二,尽量不要创建嵌套视图,就是在视图中使用视图。 这样在查询时,会多次重复访问基础表,带来性能损耗。 三,尽量在视图只返回所需的信息,尽量不要在视图使用不需要访问的表。 四,在大型表或者复杂定义的视图,可以使用存储过程代替。 五,频繁使用的视图,可以使用索引视图来代替。
索引视图的特点
1,在索引视图中,不能使用*号,必具指定所有结果集中的列名。 2,在索引视图中,所有用到的表前都必须加表所属的架构dbo。 3,在索引视图中不能有重复的列(其实在普通视图中也有该限制) 4,在索引视图中只能创建唯一聚集索引。