【发布时间】:2012-03-29 05:08:07
【问题描述】:
我正在使用一个性能较慢的 Oracle 数据库,因为在某些表上连接以获得结果。我正在考虑创建一个新表来存储其中一些数据,以便可以快速检索它而无需执行连接。另一种选择是为我正在执行的连接创建一个视图,然后始终在视图中查询数据。使用新表与创建视图之间的性能权衡是什么?我认为视图仍然需要运行连接,因此它不会提供与新表一样好的性能。
关于 Oracle 数据库视图的信息在这里: - http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8004.htm - What is a View in Oracle?
根据以下回复进行澄清。查询大多已经优化,所以我不想做优化。更喜欢新表或物化视图,但想知道哪个可能更好。我对性能感兴趣。编写更多代码以使新表与旧表保持同步不是问题。我只会在对旧表进行修改的地方添加修改语句。如果物化视图比添加新表慢,我不想使用它。
区别在于数据的刷新对于物化视图还是对于新表更有效。对于新表,基本上我会在旧表有更新的地方添加更新语句。因此,当用户查询新表时,数据已经存在(无需进一步处理)。但是对于物化视图,如果视图仅在用户查询视图时自行刷新,那么这可能会更慢。
【问题讨论】:
-
View 根据查询显示数据。这样可以避免数据复制并节省您的存储空间,而不是创建新表。我认为对于性能问题,请查看查询优化。
-
我认为你的意思是物化视图,不是吗?
-
哦,需要看看区别,我刚开始使用oracle。我只使用简单的视图,比如
CREATE VIEW -
您的问题是您有很多复杂的查询,这些查询都可以单独运行,但是当您组合它们时执行很糟糕?
-
您的论点:“由于连接而导致性能下降”并不令人信服。通常,通过正确引入索引,连接作为索引嵌套循环执行。因此,没有根本原因为什么您的连接查询应该比简单查询慢得多(从具有单个表谓词的一个表中选择)。
标签: database oracle database-design