请问这两种写法,哪种的执行效率快一些?
1. IF (UPDATE (SELECT * FROM TABLENAME WHERE ...) SET COLUMN1 = XX)==0;2. IF (SELECT COUNT(*) FROM TABLENAME WHERE ...) != 0;
UPDATE TABLENAME SET COLUMN1 = XX WHERE ...;其中第二条是我之前做的一个小系统的写法,用C#,主要是用于判断记录是否存在,存在则更新,否则插入新值。 因为做的时候用的数据量不大,才100来条,所以两种写法看不出区别来,而我觉得第二条这样的写法从逻辑上别人更好看懂,考虑到实际应用,所以还是想把性能稍稍改善一下为好。
1. IF (UPDATE (SELECT * FROM TABLENAME WHERE ...) SET COLUMN1 = XX)==0;2. IF (SELECT COUNT(*) FROM TABLENAME WHERE ...) != 0;
UPDATE TABLENAME SET COLUMN1 = XX WHERE ...;其中第二条是我之前做的一个小系统的写法,用C#,主要是用于判断记录是否存在,存在则更新,否则插入新值。 因为做的时候用的数据量不大,才100来条,所以两种写法看不出区别来,而我觉得第二条这样的写法从逻辑上别人更好看懂,考虑到实际应用,所以还是想把性能稍稍改善一下为好。
解决方案 »
- 在线等!!!!!!着急
- suse 下oracle11g乱码
- 安装oracle10g时报ORA-12560错误
- sql语句,求高手指教
- oracle 里SQL语句UNION怎么用??
- ORA-04031:无法分配4096字节的共享内存("shared pool
- 请教一个如何快捷修改表中字段类型的问题
- 安装好Oricle 9i 后,节点向导是什么
- 我在linux.0装oracle 8.1.7,为什么都是乱码/
- 如何去除当创建database link时oracle自动添加的US.ORACLE.COM后缀?
- virtual circuit wait等待事件是怎么产生的?如何去掉
- 请问oracle Enterprise Management -> Configuration Assistant 中的"资料档案库" 是干什么用的啊?谢谢啊
因为update本身会默认执行一个select。
类似于:UPDATE TABLENAME SET COLUMN1 = XX WHERE ...; 本身数据库就会去检索数据有侧更新,没有不更新。第二种方法,多了一个检索的过程,从逻辑上分析。但是我不明白的是为什么要先判断再更新了呢。 直接下面这么干不可以么
UPDATE TABLENAME SET COLUMN1 = XX WHERE ...;
IF SQL%ROWCOUNT = 0 THEN --没有更新记录
...
ELSE --有更新记录
....
END IF;
--也可以用异常处理来实现,操作放到begin end块
begin
update ...
exception
when others then
insert into ...
end;
1. IF (UPDATE (SELECT * FROM TABLENAME WHERE ...) SET COLUMN1 = XX)==0;
2. IF (SELECT COUNT(*) FROM TABLENAME WHERE ...) != 0;
UPDATE TABLENAME SET COLUMN1 = XX WHERE ...;
在执行计划中执行一下不就知道了。