sql语句:
select c.productcode,
       a.subscriberid,
       b.productname,
       c.detailbillid,
       c.AdjustID,
       c.Adjustamount,
       c.AdjustReason,
       '1'
  from v_productbilldetail a,
       t_productinfos      b,
       T_Adjustcharge      c,
       t_subscriberinfos   si
 where c.detailbillid = a.detailbillid
   and c.productcode = b.productcode
   and si.subscriberid = a.subscriberid
   and si.customerid = '1010325645'
   and c.createdate >= to_date('2011-01-01', 'yyyy-mm-dd')
   and c.createdate <= to_date('2011-03-31', 'yyyy-mm-dd')它的执行计划如下:很显然,视图没有用到索引但是如果只有如下两个表连接的话,视图却用到了索引。
select si.*
  from v_productbilldetail a, t_subscriberinfos si
 where si.customerid = '1010325645'
   and a.subscriberid = si.subscriberid
执行计划如下:问题:
我该如何让第一条sql里的视图也用到索引呢?

解决方案 »

  1.   

    没做过实验,不过你可以试试在视图的定义语句中加hints试试。
      

  2.   

    看不到楼主的执行计划,能不能发个文本的?v_productbilldetail这个是个VIEW?我猜T_Adjustcharge可能没有数据。
      

  3.   

    v_productbilldetail
    这个是视图
      

  4.   

    应该是VIEW的问题,建议把SQL改成不用VIEW,再试试。
      

  5.   

    不用view,确实可以解决问题
    但我就是想用视图来解决问题
    不知道可行不可行?之所以要用视图
    是因为代码简洁些
    如果改成表
    代码难看了同时还想搞清楚到底怎么用视图上的索引
      

  6.   

    是不是 Oracle内部进行的隐式转换导致不走索引,楼主试试加一个hint 看看。