Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过使用视图而不是联接,我是否获得了性能优势?_Sql_Performance_Join_View - Fatal编程技术网

Sql 通过使用视图而不是联接,我是否获得了性能优势?

Sql 通过使用视图而不是联接,我是否获得了性能优势?,sql,performance,join,view,Sql,Performance,Join,View,在我们的项目中,我们经常在3个表上编写复杂的连接。我们是通过使用视图获得性能优势,还是仅仅为了简化查询编写者的工作?如果重要的话,我们使用MySQL。如果因此获得了任何优势(当然不是简单的查询),请说明。视图只是逻辑表,与您在运行时运行相同的sql没有什么不同。唯一的区别是一种物化视图,就像oracle使用的一样,它类似于缓存视图。一般来说,普通视图与仅运行查询相比并不能提供太多的性能改进。然而,大多数数据库系统,包括MySql(我相信…我使用它已经有一段时间了)都提供了某种索引或物化视图功能。

在我们的项目中,我们经常在3个表上编写复杂的连接。我们是通过使用视图获得性能优势,还是仅仅为了简化查询编写者的工作?如果重要的话,我们使用MySQL。如果因此获得了任何优势(当然不是简单的查询),请说明。

视图只是逻辑表,与您在运行时运行相同的sql没有什么不同。唯一的区别是一种物化视图,就像oracle使用的一样,它类似于缓存视图。

一般来说,普通视图与仅运行查询相比并不能提供太多的性能改进。然而,大多数数据库系统,包括MySql(我相信…我使用它已经有一段时间了)都提供了某种索引或物化视图功能。通常,此类视图有相当多的限制,但一旦创建,备份查询的结果将缓存在物理表中(对于SQL Server索引视图,则为TempDB中的表)。然后,数据库服务器负责跟踪对基础查询的更改,并更新缓存的副本。按照查询普通表的顺序,对此类索引/物化视图的查询通常要快得多。

视图(普通视图)本身并不提供性能优势,除非使用具有许多限制的索引视图(也称为物化视图)。并非所有观点都能具体化。

我想将你的答案和jrista的答案一起标记为正确答案,但显然只有一个答案可以标记为正确答案,所以我投了赞成票。