tbloutcallbilldaily这表有多少记录?

解决方案 »

  1.   

    tbloutcallbilldaily有记录:106970
    tbloutcalllist有记录:3000000而且,子查询是查询不到记录的
      

  2.   

    如果子查询没有数据,那么www.tblOutCallBillDaily表的fldSeatReply 字段将全部被更新为空值,null.
      

  3.   

    根据表的纪录,这句sql运行非常慢是有可能的。你能不能提供这个语句的执行计划(explain plan)?如果执行计划中SELECT部分用到full table scan 或者full index scan的话,那这个语句执行几个小时甚至更久都是很可能的。
      

  4.   

    trunc(TO_DATE('2004-04-06', 'YYYY-MM-DD')) -trunc(tblOutCallList.fldDate) <= 0 and trunc(TO_DATE('2004-04-10', 'YYYY-MM-DD')) -trunc(tblOutCallList.fldDate) >= 0这几个表达式中,不论你是否在其中的字段上创建过索引,
    这些计算均可能导致全表扫描(除非你建了这样的函数索引,如果真是
    这样的话,你的update速度不会这么慢),而一个查询语句执行一个
    记录分别为:106970条,3000000条,不用说执行联接查询,
    你直接执行select * from tbloutcalllist后就会知道有多么漫长,
    更何况是联接查询呢!总之,这个语句要想提高执行效率,可以通过
    1、在联接字段上创建索引;
    2、将左边计算式改在右边,例如:datefield=trunc(...)。
      

  5.   

    但我发现慢的原因好象是因为加了distinct啊,如果我去掉distinct,只需10多秒就可以完成了,请问如何解决~!
        万分感谢啊
      

  6.   

    我的看法:
    第一:
    trunc(TO_DATE('2004-04-06', 'YYYY-MM-DD')) 用 TO_DATE('2004-04-06', 'YYYY-MM-DD')就行,不用再trunc第二:
    时间相比,最好只用它的原型,不用在trunc,否则这个字段如果有索引就会用不到(应该是这样吧,呵呵),比如上句改为 tblOutCallList.fldDate >= TO_DATE('2004-04-06', 'YYYY-MM-DD')。
      

  7.   

    回复人: guohongchen(风) ( ) 信誉:100  2004-9-9 14:50:51  得分: 0  
     
     
       
    但我发现慢的原因好象是因为加了distinct啊,如果我去掉distinct,只需10多秒就可以完成了,请问如何解决~!
        万分感谢啊**************************************************************************
    我从原语句中怎么就没有发现有distinct,再说这个词能对你的执行效率起到多大的
    作用呢?能否把加上distinct的语句贴出来看看?对于这么大的表记录,建议还是按照上面的方法去修改执行语句。