首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

雷同查询条件,新增了关联的表,确提升了查询效率!求大师

2013-03-26 
相同查询条件,新增了关联的表,确提升了查询效率!?求大师SQL1:SELECT COUNT(*)FROM tbm_order_queue_his a,

相同查询条件,新增了关联的表,确提升了查询效率!?求大师
SQL1:
SELECT COUNT(*)
  FROM tbm_order_queue_his a, tbm_main_inst_his c
 WHERE a.order_id = c.order_id
   AND a.state = 1
   AND c.is_new = 1
   AND a.offer_id IN (SELECT tso.offer_id
                        FROM tpm_service_offer tso
                       WHERE tso.offer_type_id = 1)
   AND a.prod_id IN (SELECT tmp.main_prod_id
                       FROM tpm_main_product tmp
                      WHERE tmp.prod_big_id in (11, 12))
   AND c.company_id in
       (select tc.company_id
          from tsm_company tc
         start with tc.company_id = 1668
        connect by PRIOR tc.company_id = tc.upper_id)
   AND a.finish_time BETWEEN
       to_date('2012-02-01 11:35:17', 'yyyy-mm-dd hh24:mi:ss') AND
       to_date('2012-02-28 11:35:20', 'yyyy-mm-dd hh24:mi:ss')


SQL2:
SELECT count(*)
  FROM tbm_order_queue_his a, tbm_main_inst_his c, tbm_cust_his d
 WHERE a.order_id = c.order_id
   AND a.order_id = d.order_id
   AND a.state = 1
   AND c.is_new = 1
   AND d.is_new = 1
   AND a.offer_id IN (SELECT tso.offer_id
                        FROM tpm_service_offer tso
                       WHERE tso.offer_type_id = 1)
   AND a.prod_id IN (SELECT tmp.main_prod_id
                       FROM tpm_main_product tmp
                      WHERE tmp.prod_big_id in (11, 12))
   AND c.company_id in
       (select tc.company_id
          from tsm_company tc
         start with tc.company_id = 1668
        connect by PRIOR tc.company_id = tc.upper_id)
   AND a.finish_time BETWEEN
       to_date('2012-02-01 11:35:17', 'yyyy-mm-dd hh24:mi:ss') AND


       to_date('2012-02-28 11:35:20', 'yyyy-mm-dd hh24:mi:ss')

SQL1执行时间:501秒
SQL2执行时间:2秒以内
不明白为何多关联一个表效率反而提高了。
SQL如上所示,查询条件中以下列建了索引(a.offer_id,a.prod_id,c.company_id,a.finish_time,a.order_id,d.order_id)
该时间段数据量10W左右。总数据量300W左右。

若SQL1去掉条件:
   AND c.company_id in
       (select tc.company_id
          from tsm_company tc
         start with tc.company_id = 1668
        connect by PRIOR tc.company_id = tc.upper_id)
则执行效率也在2秒以内,SQL2有SQL1的所有查询条件,但SQL2为何还会能快?寻大师指点。(SQL2中tbm_cust_his表 order_id建了索引) sql
[解决办法]
3个表里的order_id都是唯一的吗?或者至少两个表里是唯一的?否则出来的结果可能是错误的。。

另外,d表是不是数据量较少?

最好是把两个语句的执行计划都贴出来这才分析得出来……

热点排行