关于sql:可以有很多数据库视图吗?

关于sql:可以有很多数据库视图吗?

Is it okay to have a lot of database views?

我很少(每月/每季度)使用Microsoft SQL Server 2005数据库视图生成数百个Crystal Reports报表。 这些视图是否一直在浪费我的时间,而不是在浪费它们的CPU周期和RAM? 由于我很少从视图中读取内容,我应该改为使用存储过程,临时表或短暂的普通表吗?

我不是DBA,所以我不知道数据库服务器内部幕后发生的事情。

是否有太多的数据库视图? 什么是最佳做法?


在大多数情况下,这并不重要。是的,SQL Server解析SELECT * FROM table时将有更多选择(它必须在系统目录中查找" table"),但对此进行了高度优化,并提供了足够的RAM(当今大多数服务器都这样做) ,您不会注意到0到1,000次观看之间的差异。

但是,从人们的角度来看,试图管理和弄清楚"百"种视图在做什么是不可能的,因此您可能在那里有很多重复的代码。如果嵌入在这些冗余视图中的某些业务规则发生更改,会发生什么?

观点的主要观点是将业务逻辑封装到一个伪表中(因此您可能有一个人员表,但随后有一个称为" active_persons"的视图确实起到了神奇作用)。为每个报告创建视图是很愚蠢的,除非每个报告是如此孤立和独特,以至于无法重复使用。


视图是经常使用预设参数运行的查询。如果您知道您将一直在查看相同的数据,则可以创建一个易于使用和绑定数据的视图。

就是说,当您从视图中选择视图时,定义查询将与您正在运行的查询一起运行。

例如,如果vwCustomersWhoHavePaid为:

1
SELECT * FROM customers WHERE paid = 1

并且您正在运行的查询返回在8月1日之后付款的客户,其格式如下:

1
SELECT * FROM vwCustomersWhoHavePaid WHERE datepaid > '08/01/08'

您实际正在运行的查询是:

1
SELECT * FROM (SELECT * FROM customers WHERE paid = 1) WHERE datepaid > '08/01/08'

创建视图时应牢记这一点,它们是存储您经常查看的数据的一种方式。这只是组织数据的一种方式,因此更易于访问。


您问:幕后发生了什么?

视图是一堆SQL文本。当查询使用视图时,SQL Server将该SQL文本放入查询中。这是在优化之前发生的。结果是优化器可以考虑合并的代码,而不是两个单独的代码段,以实现最佳执行计划。

您应该查看查询的执行计划!那里有很多东西要学习。

SQL Server还具有群集视图的概念。集群视图是系统维护的结果集(基础表上的每个插入/更新/删除都可能导致集群视图数据上的插入/更新/删除)。认为视图以集群视图的方式运行是一个常见的错误。


调用视图时,它们只会占用cpu /内存资源。

无论如何,最佳实践是合并可以合并的内容,删除可以删除的内容,并且如果字面意义仅由报表使用,请为视图选择一致的命名标准,以便在查找特定视图时可以轻松地将它们分组在一起。

另外,除非您确实需要事务隔离,否则请考虑在查询中使用NOLOCK表提示。

-凯文·费尔柴尔德(Kevin Fairchild)


推荐阅读

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux命令进数据库?

    linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,

    linux删除视图命令?

    linux删除视图命令?,系统,软件,电脑,管理,地方,环境,地址,检测,情况,名称,ubu

    linux数据库检查命令?

    linux数据库检查命令?,服务,状态,地址,位置,系统,信息,命令,工作,情况,密码,

    linux命令进去数据库?

    linux命令进去数据库?,地址,服务,名字,系统,数据库,工具,基础,工作,管理,网

    linux数据库基础命令?

    linux数据库基础命令?,地址,工作,基础,系统,命令,信息,情况,工具,设备,目录,l

    数据库导出命令linux?

    数据库导出命令linux?,数据,系统,名称,密码,软件,服务,情况,网上,工具,文件,L

    php读取linux命令?

    php读取linux命令?,系统,环境,项目,工具,风险,命令,函数,文件,目录,终端,PHP

    linux读取日志的命令?

    linux读取日志的命令?,系统,信息,情况,实时,对比,日志,命令,指令,文件,尾部,L

    linux数据库删除命令?

    linux数据库删除命令?,软件,服务,产品,名称,系统,不了,地址,管理,电脑,命令,L

    linux数据库操作命令?

    linux数据库操作命令?,信息,系统,网络,地址,分析师,数据,名称,管理,基础,命

    linux连数据库命令?

    linux连数据库命令?,服务,地址,密码,名字,系统,软件,一致,命令,数据库,读法,

    linux读取ip命令?

    linux读取ip命令?,地址,网络,系统,信息,状态,数字,电脑,终端,命令,中心,linux

    备份数据库命令linux?

    备份数据库命令linux?,服务,网络,备份,数据,工具,设备,系统,一致,数据库,命

    linux读取命令耗时?

    linux读取命令耗时?,时间,系统,信息,地址,服务,百分比,网络,基础,工具,命令,l

    linux登录数据库命令?

    linux登录数据库命令?,地址,系统,名字,服务,软件,标准,灵活,命令,数据库,读

    linux数据库选择命令?

    linux数据库选择命令?,系统,地址,工作,软件,管理,信息,工具,基础,命令,服务,

    linux数据库版本命令?

    linux数据库版本命令?,密码,服务,地址,工具,系统,环境,基础,网络,基础知识,

    linux运行数据库命令?

    linux运行数据库命令?,服务,系统,工作,信息,代码,命令,文件,数据库,下面,目

    linux读取命令方式?

    linux读取命令方式?,位置,信息,工作,管理,命令,软件,图片,名称,发行,环境,lin