如何提高update的效率

bjzhangyang 2006-09-06 10:26:25
我在更新的时候使用了如下语句,需要更新的数据(t1表)大约在30万左右,用于查询的表t2数据量在4万左右,这条语句执行起来相当的慢,请问有没有什么好方法可以提高执行的效率呢?

update t1 set area=(
select area from t2
where substr(t1.number,1,3)=t2.number
)
where exists (
select area from t2
where substr(t1.number,1,3)=t2.number
)
...全文
370 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzlkl 2006-09-11
  • 打赏
  • 举报
回复
原来这样子啊

为什么这个语句我执行不行呢

update t1
set area=t2.area
from t1 join t2 on substr(t1.number,1,3)=t2.number

他会告诉我语句未正确结束!
xiaoxiao1984 2006-09-08
  • 打赏
  • 举报
回复
update t1 set area=(
select area from t2
where t1.number like t2.number||'%'
)
where exists (
select 1 from t2 where t1.number like t2.number||'%')

建立函数索引的话比较影响插入数据的速度
且不好维护,插入数据的时候,需要执行函数,按结果更新索引
能不用函数就尽量不要用函数索引
zonelive 2006-09-08
  • 打赏
  • 举报
回复
update t1
set area=t2.area
from t1 join t2 on substr(t1.number,1,3)=t2.number
这样就好了吧lz
wangzk0206 2006-09-07
  • 打赏
  • 举报
回复
建立函数索引应该可以提高你的速度。
wiler 2006-09-06
  • 打赏
  • 举报
回复
你的数据库版本是9i的吗?
建完索引后最好用
analyze table t1 estimate statistics;
analyze table t2 estimate statistics;
对两个表都做统计分析,以便oracle 能以最优方式执行查询
wiler 2006-09-06
  • 打赏
  • 举报
回复
对t1创建函数索引:
create index ix_t1_substr_num on t1 (substr(number,1,3);
对t2创建索引:
create index ix_t2_num on t2 (number);

sungangsg 2006-09-06
  • 打赏
  • 举报
回复
update t1 set area=(
select area from t2
where substr(t1.number,1,3)=t2.number
)
where substr(t1.number,1,3) in (select t2.number from t2)
这样写不知道行不行
另外在ORACLE的管理平台选中你用到的表和视图,点右键执行分析试一下

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧