作业帮 > 综合 > 作业

oracle 多表查询速度太慢.求帮我优化一下

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/07/30 23:42:25
oracle 多表查询速度太慢.求帮我优化一下
select jbjxxid,anjianmingcheng,JBJXXSLBH,SARJBXXID,SARMC,JBDWMC from tb_jbjxx,tb_ajjbxx,tb_sarjbxx,tb_xyr,tb_chengbaoxinxi
where tb_jbjxx.JBJXXID=tb_ajjbxx.JBJXXSLBH or tb_ajjbxx.QTRYXXSLBH=tb_sarjbxx.SARJBXXID or tb_sarjbxx.XXLYYWID=tb_xyr.XYRLYYWID
or tb_chengbaoxinxi.XXLYYWID=tb_ajjbxx.XXLYYWID and tb_jbjxx. like '东城建国%';
查询出来结果都是同一条数据,一直在循环.统计一下数量多少怎么加
oracle 多表查询速度太慢.求帮我优化一下
你写表关联条件的时候使用了 OR
那就是说任何一个条件满足就会被检索出来,所以产生大量笛卡尔集(就是重复数据)
那么5表查询就会产生(tb_jbjxx的数据件数* tb_ajjbxx的数据件数*tb_sarjbxx的数据件数*tb_xyr的数据件数*tb_chengbaoxinxi的数据件数)件数据.
所以应该把表关联的条件修改为 AND
修改后SQL文如下:
select jbjxxid,anjianmingcheng,JBJXXSLBH,SARJBXXID,SARMC,JBDWMC
from tb_jbjxx,tb_ajjbxx,tb_sarjbxx,tb_xyr,tb_chengbaoxinxi
where tb_jbjxx.JBJXXID=tb_ajjbxx.JBJXXSLBH
AND tb_ajjbxx.QTRYXXSLBH=tb_sarjbxx.SARJBXXID
AND tb_sarjbxx.XXLYYWID=tb_xyr.XYRLYYWID
AND tb_chengbaoxinxi.XXLYYWID=tb_ajjbxx.XXLYYWID
AND tb_jbjxx.like '东城建国%';
如果你想要的是满足任何一个条件就要检索出来的话,那么一定要有一个主表,
就是查询主表的所有信息,再用其他表的字段和主表关联,有数据显示,没有数据不显示
分析你的SQL文,我推测tb_ajjbxx表是主表的概率比较高,那么SQL文的修改如下:
select jbjxxid,anjianmingcheng,JBJXXSLBH,SARJBXXID,SARMC,JBDWMC
from tb_jbjxx,tb_ajjbxx,tb_sarjbxx,tb_xyr,tb_chengbaoxinxi
where tb_ajjbxx.JBJXXSLBH = tb_jbjxx.JBJXXID(+)
AND tb_ajjbxx.QTRYXXSLBH = tb_sarjbxx.SARJBXXID(+)
AND tb_ajjbxx.XXLYYWID = tb_chengbaoxinxi.XXLYYWID(+)
AND tb_sarjbxx.XXLYYWID = tb_xyr.XYRLYYWID
AND tb_jbjxx.like '东城建国%';
--1)where条件的顺序修改了,为了提高效率
--2)where条件中=号左右内容部分交换了,为了增强可读性
--3)增加外关联符号(+)
最后,关于多表关联,表关联条件必须使用"AND"关键字,否则无效.
用你做成的SQL文检索,哪怕5个表都只有10条数据也会检索出1万件结果,如果各个表数据超过100件,你的检索结果集会是天文数字.如果我的回答没有直接解决问题,