我有下面的SQL将在Oracle 11g上运行。
想知道直接执行SQL还是通过视图执行SQL有任何区别,并且有任何性能差异
select a.*, b.*, c.*
from TABLE_A a
join TABLE_B b on b.id = a.id
join TABLE_C c on c.taskid = b.taskid
where (b.taskid in (1,2,3))
or (b.taskid in (4,5) and a.creation_date > (sysdate-10) );
是的,它可能非常罕见,因为View是对实际表的临时描述,因此,就像减少与实际整个表不同的是,通过视图选择的列数不一样。
通常,通过在视图中进行选择,通常性能可能会稍微好一些,这意味着当您只需要很少的列(您明确知道总是需要)时,您可以引用视图,因为视图已经具有最小化的表结构,而不是从表中选择几列本身。
假设在下面的查询本身中,如果我仅获得table_b的几列,那么如果我已经创建了具有表b的几列的视图。对于海量数据,整个表的连接与视图的几个必需列的连接会有所不同]
SELECT * from TABLE_A a, TABLE_B
b, TABLE_C c
WHERE a.id=b.id
and b.taskid=c.taskid
and ((b.TASKID in (1,2,3)) or (b.TASKID
in (4,5) and a.CREATION_DATE > (
sysdate-10) ));