一个关于update的问题?急,在线等待 tbloutcallbilldaily这表有多少记录? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 tbloutcallbilldaily有记录:106970tbloutcalllist有记录:3000000而且,子查询是查询不到记录的 如果子查询没有数据,那么www.tblOutCallBillDaily表的fldSeatReply 字段将全部被更新为空值,null. 根据表的纪录,这句sql运行非常慢是有可能的。你能不能提供这个语句的执行计划(explain plan)?如果执行计划中SELECT部分用到full table scan 或者full index scan的话,那这个语句执行几个小时甚至更久都是很可能的。 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(...)。 但我发现慢的原因好象是因为加了distinct啊,如果我去掉distinct,只需10多秒就可以完成了,请问如何解决~! 万分感谢啊 我的看法:第一: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')。 回复人: guohongchen(风) ( ) 信誉:100 2004-9-9 14:50:51 得分: 0 但我发现慢的原因好象是因为加了distinct啊,如果我去掉distinct,只需10多秒就可以完成了,请问如何解决~! 万分感谢啊**************************************************************************我从原语句中怎么就没有发现有distinct,再说这个词能对你的执行效率起到多大的作用呢?能否把加上distinct的语句贴出来看看?对于这么大的表记录,建议还是按照上面的方法去修改执行语句。 关于监听程序无法识别请求连接的服务的问题 高分解决oracle时间相减问题 oracle数据库备份方式的选择 如何控制job,在执行中遇到错误时就停止而不要反复执行?? 写了一个函数编译成功,执行却没结果,帮忙看下有没有错 如何安装oracle数据引擎? 复制管理员是哪个角色? oracle 9i http server 管理怎么用 错误提示:‘包写入程序失败’ 高分求救:如何优化以下的这个view?? 高手请进 数据倒入问题 请教关于ORACLE表锁定的问题!谢谢
tbloutcalllist有记录:3000000而且,子查询是查询不到记录的
这些计算均可能导致全表扫描(除非你建了这样的函数索引,如果真是
这样的话,你的update速度不会这么慢),而一个查询语句执行一个
记录分别为:106970条,3000000条,不用说执行联接查询,
你直接执行select * from tbloutcalllist后就会知道有多么漫长,
更何况是联接查询呢!总之,这个语句要想提高执行效率,可以通过
1、在联接字段上创建索引;
2、将左边计算式改在右边,例如:datefield=trunc(...)。
万分感谢啊
第一:
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')。
但我发现慢的原因好象是因为加了distinct啊,如果我去掉distinct,只需10多秒就可以完成了,请问如何解决~!
万分感谢啊**************************************************************************
我从原语句中怎么就没有发现有distinct,再说这个词能对你的执行效率起到多大的
作用呢?能否把加上distinct的语句贴出来看看?对于这么大的表记录,建议还是按照上面的方法去修改执行语句。