已经做了useday列索引
1、---------------用TO_date函数查询速度很快-----------------------
select a.goodsid,b.vipid from pub_goods a,resa_sa_dtl b where a.goodsid=b.goodsid and b.vipid>0
 and b.vipid not in(3344,1674,9028) and a.goodsname like '%(特%' 
 and  b.useday between 
TO_DATE('2012-03-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND TO_DATE('2012-03-31 23:59:59', 'yyyy-mm-dd hh24:mi:ss')2、-------------用TO_char函数查询速度好慢-------------------------------------select goods from pub_goods a,resa_sa_dtl b where a.goodsid=b.goodsid and b.vipid>0
 and b.vipid not in(3344,1674,9028) and  to_char(b.useday,'yyyy-mm-dd')=
 to_char(sysdate,'yyyy-mm-dd') 
 and a.goodsname like '%(特%' 我想查询条件中b.useday等于今天的日期就行了(sysdate代入1中的TO_date函数)。

解决方案 »

  1.   

    我想要的功能是查询条件中b.useday等于今天的日期就行了 
    不能用to_char,太慢了。
      

  2.   


    select a.goodsid, b.vipid
      from pub_goods a, resa_sa_dtl b
     where a.goodsid = b.goodsid
       and b.vipid > 0
       and b.vipid not in (3344, 1674, 9028)
       and a.goodsname like '%(特%'
       and b.useday >trunc(sysdate,'dd')
      

  3.   


    select a.goodsid, b.vipid
      from pub_goods a, resa_sa_dtl b
     where a.goodsid = b.goodsid
       and b.vipid > 0
       and b.vipid not in (3344, 1674, 9028)
       and a.goodsname like '%(特%'
       and b.useday >trunc(sysdate,'dd')
      

  4.   

    SELECT ...
      FROM ...
    WHERE b.useday >= trunc(SYSDATE)
      AND b.useday <= trunc(SYSDATE) + 0.99999
      

  5.   

    可以试试and trunc(sysdate) - b.useday = 0
      

  6.   

    直接trunc(b.useday)=trunc(sysdate)就可以 
      

  7.   

    b.useday这个字段上有所引吧?你的第一条语句走索引,第二条语句,因为对b.useday字段使用了to_char函数,就不走索引了吧,你可以看下执行计划……