oracle中的视图有啥用? [关闭]
Posted
技术标签:
【中文标题】oracle中的视图有啥用? [关闭]【英文标题】:What is the use of views in oracle? [closed]oracle中的视图有什么用? [关闭] 【发布时间】:2014-11-21 09:19:29 【问题描述】:当我可以简单地编写一个选择查询时,为什么我需要创建一个视图? 例如
/
CREATE OR REPLACE VIEW testview AS SELECT empno,ename,sal FROM emp;
/
为什么我不能写一个简单的选择查询,例如
/
SELECT empno,ename,sal FROM emp;
/
视图的实际用途是什么。在哪些场景中使用了视图?
【问题讨论】:
此类问题的第一站是 Oracle Database Concepts docs.oracle.com/database/121/CNCPT/schemaob.htm#CNCPT311,它是文档的一部分(对于使用 Oracle 的每个人来说都是必读的)。当您有具体问题时再回来。 【参考方案1】:Oracle 视图提供了一些引人注目的优势。其中包括:
正在使用的代码的通用性。由于视图基于一组常见的 SQL,这意味着当它被调用时,它不太可能需要解析。这是因为调用的基本底层 SQL 始终相同。但是,由于您可以在调用视图时添加额外的 where 子句,因此您仍然需要使用绑定变量。没有绑定变量的附加 where 子句仍然会导致硬解析!
安全。长期以来,视图一直用于隐藏实际包含您正在查询的数据的表。此外,视图可用于限制给定用户有权访问的列。在不太复杂的数据库上使用视图来保证安全性可能不是一件坏事。随着数据库变得越来越复杂,该解决方案变得越来越难以扩展,因此需要其他解决方案。
谓词推送。 Oracle 支持将谓词推送到给定视图中。
性能。应该使用它们而不是表来加快执行速度。
【讨论】:
关于性能我不同意。为什么视图应该比常规选择更快?唯一的原因可能是:当您选择一个视图时,Select 语句总是相同的,Oracle 可以重用现有的执行计划或存储在结果缓存中的任何数据。但是,当您多次运行相同的常规选择语句时,这也适用。所以视图和常规选择之间没有区别。【参考方案2】:视图的另一个用途是您可以在它们后面存储复杂的查询。例如,如果您需要查询来自多个表的数据,那么一次创建一个视图会更容易,这样下次您需要该数据时,您就不必编写查询来再次连接这些表。相反,您可以只查询视图。
顺便说一句,视图不是 Oracle 的东西,它们在许多(如果不是全部)RDBM 系统中都可用。
【讨论】:
以上是关于oracle中的视图有啥用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章