我的一张视图(v_b_aj),sql如下:
select b.systemid,b.A1,b.A2,a.departmentcode,a.sszdcode from b_aj a,ps_aj b where a.systemid=b.systemid
其中ps_aj是一个同义词,通过数据链路链接(千兆网络)到其他物理数据库中的b_ab表。b_aj、ps_aj都有20万数据。然后我基于上述视图执行下列语句:
select * from v_b_aj where sszdcode='44060655'
非常慢,要160秒才能执行完成如果我执行下列语句,非常快,零点几秒就执行完成了,(返回17条记录)。
select * from b_aj where sszdcode='44060655'我单独执行下列语句也很快,也是零点几秒就完成,返回200条记录
select * from ps_aj where A1='13060351'
也就是单独查询b_aj,ps_aj都很快,就是执行关联查询就很慢
select * from v_b_aj where sszdcode='44060655'
非常慢,要160秒才能执行完成请问各位高手如何解决。
select b.systemid,b.A1,b.A2,a.departmentcode,a.sszdcode from b_aj a,ps_aj b where a.systemid=b.systemid
其中ps_aj是一个同义词,通过数据链路链接(千兆网络)到其他物理数据库中的b_ab表。b_aj、ps_aj都有20万数据。然后我基于上述视图执行下列语句:
select * from v_b_aj where sszdcode='44060655'
非常慢,要160秒才能执行完成如果我执行下列语句,非常快,零点几秒就执行完成了,(返回17条记录)。
select * from b_aj where sszdcode='44060655'我单独执行下列语句也很快,也是零点几秒就完成,返回200条记录
select * from ps_aj where A1='13060351'
也就是单独查询b_aj,ps_aj都很快,就是执行关联查询就很慢
select * from v_b_aj where sszdcode='44060655'
非常慢,要160秒才能执行完成请问各位高手如何解决。
select b.systemid,b.A1,b.A2,a.departmentcode,a.sszdcode
from b_aj a,ps_aj b
where a.systemid=b.systemid
and sszdcode='44060655'
这样远比你视图里取出来快
你用视图相当于先取出20万条纪录,然后再取出17条纪录
from b_aj a,ps_aj b
where a.systemid=b.systemid
and sszdcode='44060655'
更惨,用了206秒。不知是何原因。
select b.systemid,b.A1,b.A2,a.departmentcode,a.sszdcode
from ps_aj b ,b_aj a
where a.systemid=b.systemid
and sszdcode='44060655'
目前这个问题已经不是使用试图变慢的问题了,只就转换为SQL调优我看更合适。
报下列错误:
SP2-0613:无法验证PLAN_TABLE格式或实体
SP2-0611:启用EXPLAIN报告时出错
@$ORACLE_HOME/rdbms/admin/utlxplan.sql
create public synonym plan_table for plan_table;
grant all on plan_table to public;
@$ORACLE_HOME/sqlplus/admin/plustrce/plustrce.sql
grant plustrace to public; 当执行grant all on plan_table to public;与grant plustrace to public; 时报错
如果按楼主的说话:那就不要用VIEW
把SQL写成select * from
(
select * from b_aj where sszdcode='44060655'..... ) a,
( select * from ps_aj where A1='13060351'..... ) bwhere a.XX=b.XXxa,b 表里的条件写多点,以减少a b表记录数为优先..
(
select * from b_aj where sszdcode='44060655'..... ) a,
( select * from ps_aj where A1='13060351' and sszdcode='44060655'..... ) bwhere a.sszdcode=b.sszdcode a.XX=b.XXx.....