oracle 数据库问题

我想问下,在操作oracle时,修改数据库有两种方法。
1、直接修改 update ;
2、先删除,在新增;
我想知道那种效率好一些!

数据库的更新操作再数据库内部分解的话也是两步:先把数据挪走,然后再插入。同时会产生很多的undo信息和日志信息。
至于你说的快慢问题:
1、当你删除用的是truncate 语句,然后再insert into的话,效率高于update。
2、当你删除用的始delete语句,然后再insert into的话,效率是低于update的。
当然这个只是从原理的角度进行了分析,对于不同的数据量和数据库配置和环境结果还是不一样的。追问

你好,你回答的很详细。我有点小白,truncate 是什么?我看的语句删除都是用的delete啊;

追答

truncate语句和delete的作用是一样的,删除一个表中的数据。
1、delete是给这数据行打上标记,数据被删除了,实际上数据还是存在的,而且是逐行打标记的,效率低。可以再误删除后roll back。
2、truncate是把删除的数据行的数据真正的删除掉了,而且是不能回滚的,也就是不能roll back,效率很高。

追问

谢谢!分就给你吧!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-22
纯粹的比较没有意义。根据你项目的情况决定哪一种。
一般遵循以下原则:
1 尽量避免大数据量的update和delete
2 像你这样的情况就比较麻烦了。看你的样子是删除部分数据,不能truncate的。
3 分析下这个表。如果有索引,delete的时候能够使用到这个索引提高效率,那么推荐用delete再insert 我以前做过一个项目也是这样的。
4 再深入点。后来对这个项目进行了大规模的优化。将这个表做成了分区表。每次删除数据都是truncate一个分区。效率大大得到提高。或许你们的也能这样做
第2个回答  2012-05-22
我觉得应该是update吧,因为先删除再新增的话对数据库进行了两次操作,肯定没有update对数据库进行一次操作来的快
第3个回答  2012-05-22
都一样,看你的用途主要是做什么的追问

因为做项目的时候总能看到后一种操作,所以很疑惑!为什么要那么做?

相似回答