会不会增加性能?

时间:2009-05-11 15:25:43

标签: database performance

我有六个表将加入许多查询。如果通过加入所有表创建的View将提高性能?。是否有任何替代方法可以提高性能?我使用oracle作为数据库,所有连接的列都被编入索引。

4 个答案:

答案 0 :(得分:7)

视图本身不会提高性能。据说,根据您使用的数据库引擎,您可以使用视图执行某些操作。

在SQL Server中,您可以在视图上放置索引(假设视图符合各种要求)。这可以大大提高性能。

您使用的是什么DBMS?

修改

在oracle中,您可以创建物化视图。这是一个可以帮助您入门的链接。我不知道Oracle所以我真的只能提供链接。

http://searchoracle.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid41_gci909605,00.html

答案 1 :(得分:4)

正确的索引是连接到许多表时提高性能的关键。

添加视图可能会在索引时提高性能,如果不是,则可能会降低性能。很大程度上取决于您的数据库设计和视图所基于的实际查询。一旦视图将执行的操作是确保使用的每个人都在查看相同的六个表。这是一个加号或减号,具体取决于查询(并非所有基于视图的查询实际上都需要所有六个表)。

我要看的第一件事是您的外键字段当前是否已编入索引。主键在创建时被赋予索引,但外键不是。由于它们在连接中使用,因此应将它们编入索引以提高性能。

答案 2 :(得分:3)

应该注意视图的工作原理:它们在运行时运行视图查询。它们不是预先缓存的,因此没有索引,它们本质上是函数调用。

在表和视图上大量使用索引以提高性能。不要枪毙它们,但精心设计的索引可以昼夜为你的表现。

答案 3 :(得分:0)

它还取决于数据库。如果RDMS没有根据您的标准分析基础查询,则可能根本无法正常运行。

大多数当前的RDMS都会进行查询重写(我认为SQL Server的某些早期版本,如6或7,没有这样做),它会根据你的查询拆分视图,然后重写整个事物关于其优化技术。

使用该视图的各种查询迭代可以缓存其计划并以此方式获得一些性能。

所以,根据我的理解,至少在理论上(取决于数据库优化器),使用视图与编写整个查询没有什么不同。