数据库
首页 > 数据库> > mysql-视图性能提升是否仍与现代RDBMS相关

mysql-视图性能提升是否仍与现代RDBMS相关

作者:互联网

毫无疑问,写SELECT * FROM viewCostumerAddress比SELECT c.id,c.name,a.id,a.fullAddress FROM客户c在JOIN地址a.id_costumer = c.id上更简单直观, c.优先,但是当一群人告诉您“视图的性能要好得多”并且您的测试没有显示出您所获得的好处时?
我执行的所有测试都使用相同的SQL Server2014.数据集包含约2kk客户端和2.5kk地址.任何时候,服务器内存消耗都不会超过60%.在执行冷查询测试之后,始终会执行完整的服务重新启动,以“强制清除”所有预编译查询和所有缓存的信息.仅在每个查询/视图被命中200次之后,才记录热查询的结果,并过滤尽可能多的不同值.所有测试均在专用而非虚拟服务器(裸机)上进行了1000次.
但是,对于热查询,最终结果的变化小于1%(0.971%),对于冷查询,最终结果的变化几乎为0(0.0024%).

面对这些结果,我想知道在现代RDBMS环境和“对象关系映射器”中,性能的旧主张是否仍然是从视图而不是直接从表中查询数据的有效理由?

PS:请在回答中尽量做到科学,提供测试方法(如果有)和/或科学论文,或者在举报您目击的事件时要具体而透彻.

解决方法:

如果您有一个非索引视图的普通视图,则不会提高性能.这是因为,当您从视图中选择时,SQL-Server会像不使用视图一样运行T-SQL-Statement.

这些是我对观点的一些看法:

1.视图是安全层

我个人不希望任何人直接访问我的基表.
在视图中,我可以根据调用者的权限过滤掉行.
直到SQL Server 2014,您都无法使用表执行此操作.

2.视图返回特定的列集

如果必须更改基础表的架构,则可以以某种方式更改视图,使其返回与以前相同的列.如果您不使用视图,并且用户自己从基表中进行选择,则查询可能会失败.

3.视图节省了开发时间

您不必一遍又一遍地编写相同的T-SQL语句.而且,如果T-SQL语句中有错误怎么办?只需将其固定在一个位置即可.您可能不必更改应用程序或许多功能以及存储过程.

4.使用索引视图加速SELECT

当您发现视图中的INNER JOIN太昂贵并且没有更多其他选项(例如有用的索引或架构更改)时,可以使用索引视图来加快SELECT的速度.但是您可能会在INSERT,UPDATE和DELETE上降低性能,因为视图的索引也必须更新.

标签:database-performance,view,mysql,sql-server
来源: https://codeday.me/bug/20191119/2039072.html