解决方案 »
- oracle数据库ora-12500问题 生产库,进不了急
- pgAdmin 连接另一台的PostgreSQL报错
- 通配符的用法
- grant授权问题
- oracle 10g里怎么解析XML文件?很急,请大家帮帮忙!谢谢!
- 根据天来算周、月、季、年,求助!!!
- 谁知道STAR SCHEMA?请进...
- 触发器中是否可以用in语句?这样写有什么问题?
- 我在win98 下安装了817 for win98 ,安装ok,sqlplus登陆ok,但是测试连接时老说没有监听器,但是我的监听器肯定是配置好的,在Listener
- ORA-01555 snapshot too old,这样的问题如何解决?再线等待!
- 在oracle 动态sql 中 怎样实现类的的功能? 不用游标。
- 通过sqlserver的表 更新 Oracle的表 怎么做??
-----------------------------------------------------------------
这个牵涉到Oracle的内部实现机制,一般来说,insert只需要为新记录找到一个可插入的地方,然后将记录数据按照内部格式复制到对应的位置就可以了,加上你的表没有索引,因此也没有索引操作的时间消耗,所以快;对于update而言,多了很多操作,简单而言,
(1)因为没有索引,因此,需要更新前先需要通过全表扫描的方式来定位记录,这大概会消耗掉你所提的大部份时间;所以楼上有人建议你更新前先建合适的索引;
(2)需要为旧记录数据复制到称为回滚段的地方,以便保证数据可以正确回滚,因此,这里实际至少要处理两条记录的插入操作,就这点上,会比insert耗时在两倍以上;
(3)因为update可能会导致原记录所在页的空间不够存放新的数据,因此,需要将更新后的记录“迁移”到另外的数据页上,而这种迁移处理是非常耗时的。为了减少迁移发生,所以L3建议你增大PCTFREE的值。
另外,如果这个表经常update会有些碎片,也会影响到更新的速度,可以定期对表进行碎片整理,如在线重建索引等。