Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 oracle:是否建议使用基本视图作为更专业化视图的抽象基础_Sql_Oracle_View - Fatal编程技术网

sql oracle:是否建议使用基本视图作为更专业化视图的抽象基础

sql oracle:是否建议使用基本视图作为更专业化视图的抽象基础,sql,oracle,view,Sql,Oracle,View,我有一个包含许多相关表的模式。一个视图让我将所有这些表聚集在一个大表中,便于我的应用程序处理 现在,我需要向应用程序呈现稍微不同的视图:再呈现一个关系,一些附加列 A very simplified example: the real one has many fields and tables related Base request: select T1.C1, T2.C2 from T1, T2 where ... Specialized request A: select T1.C1

我有一个包含许多相关表的模式。一个视图让我将所有这些表聚集在一个大表中,便于我的应用程序处理

现在,我需要向应用程序呈现稍微不同的视图:再呈现一个关系,一些附加列

A very simplified example: the real one has many fields and tables related
Base request: 
select T1.C1, T2.C2
from T1, T2
where ...

Specialized request A:
select T1.C1, T2.C2, T2.C3, T4.C4
from T1, T2, T4
where ...

Specialized request B:
select T1.C1, T2.C2, T2.C3, T5.C5
from T1, T2, T5
where ...

您认为创建第一个视图“基本视图”,然后重用此视图来创建视图a和视图B是一个好主意吗(从维护和性能的角度来看)?

假设您始终需要连接T1和T2,那么是的,基本视图将是一个好主意。当您需要添加其他视图时,它将降低维护成本


基本视图的主要危险在于,基本视图不起作用,而专用结果不起作用。例如,如果基本视图连接了专门化请求不需要的第三个表,那么专门化请求的效率将低于其他情况。(请注意,这取决于Oracle版本和优化器——在最新版本中,优化器可能会发现一个专门的查询不需要在从查询计划中删除表的情况下连接第三个表)。

假设您总是需要连接T1和T2,那么是的,基本视图将是一个好主意。当您需要添加其他视图时,它将降低维护成本


基本视图的主要危险在于,基本视图不起作用,而专用结果不起作用。例如,如果基本视图连接了专门化请求不需要的第三个表,那么专门化请求的效率将低于其他情况。(请注意,这取决于Oracle版本和优化器——在最新版本中,优化器可能会发现,专用查询不需要将第三个表加入到从查询计划中删除该表中)。

这可能是一件有用的事情,但您需要小心。它值得一读。

这可能是一件有用的事情,但你需要小心。它值得一读。

您可以创建一个物化视图,该视图连接一组“核心”的基本(常规)表,并包含“大多数”查询中需要的任何/所有列。让这个mat视图完成繁重的工作,将结果存储在快照表中(根据需要添加索引)

这将在数据构建实例中完成,并按一定的时间表刷新,然后迁移到应用程序生产实例


应用程序可以点击mat视图,如果需要,偶尔也可以连接到另一个表。

您可以创建一个物化视图,连接一组“核心”的基本(常规)表,并包括“大多数”查询中需要的任何/所有列。让这个mat视图完成繁重的工作,将结果存储在快照表中(根据需要添加索引)

这将在数据构建实例中完成,并按一定的时间表刷新,然后迁移到应用程序生产实例


应用程序可以点击mat视图,如果需要,偶尔会连接到另一个表。

这是一个好建议,但在我目前的情况下,数据量不足以证明物化视图的合理性。这是一个好建议,但在我目前的情况下,数据量不足以证明物化视图的合理性。