请教一个视图的性能问题
表A,B,M,N数据都很多,B是A的子表,M,N是B的子表
A:B=1:N
B:M=1:N
B:N=1:N
现在创建了一个视图
create or replace view V_Z as
with V as (select B.B_ID_, A.A_ID_ ... from B inner join A on B.A_ID_ = A.A_ID_)
select B.B_ID_, A.A_ID_, ... from M inner join V on M.B_ID_ = V.B_ID_
union all
select B.B_ID_, A.A_ID_, ... from N inner join V on N.B_ID_ = V.B_ID_
视图中先创建了一个B表的临时视图,然后关联M,N进行查询
然后在此视图上继续查询
select * from V_Z where A_ID_ = '***'
现在的问题是速度比较慢。
如果能把 A_ID_ = '***'这个条件放到视图里面,
with V as (select B.B_ID_, A.A_ID_ ... from B inner join A on B.A_ID_ = A.A_ID_ and A_ID_ = '***')
速度就会快很多。其实就是先过滤后查询,和先查询,后过滤的问题。当然是先过滤快。但现在这个动态的过滤如何能放进视图中?
我看过网上的一些方法,特别是用oracle函数传参的那种,感觉不是很好,肯定会有并发的问题。是否有较好的sql写法,能让oracle自动进行优化?