oracle中的自增列,哪种实现方法更优? 请问各位,自增列(同时也是主键列)的实现:1\定义序列,为列添加触发器(使用序列);2\定义序列,在insert语句中使用序列;3\直接在insert语句前,select max值使用;哪种做法性能更好? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第2种呀第1种用触发器,数据量大时性能用影响第3种同样而且oracle本身提供的方法肯定比我们自己写的要好一些。 这三种中“3\直接在insert语句前,select max值使用;”这种是最不好的因为在多用户并发的情况下,可能会出现重号的,因为oracle是读一致的,当没提交时select max取的值有可能一样(这个概率虽然很小,但有这种可能),第1种用触发器,因为用了触发器就会对性能有影响 可以用一个呀,在oracle的文档中有说明,以于所有number类型的列可以使用同一个序列。 都共用一个的话,我现在想到的一个缺点就是,会造成自增列的值不那么连续,当然也许这根本就不算什么问题.如果独立的话,我想到的一个缺点就是,必然要建立更多的序列,oracle维护更多的序列时,相对而言是不是加重了它的负担?不过,想区别一下:如果共用,有什么优缺点?如果独立有什么优缺点? 如果用序列,就别指望他会连续,因为序列是不受你的事务控制的select seq.nextval from dual一次不管你的自己的事务是否提交,它都会增加。共用也不共用没有什么实质的区别,只是看个人习惯程序的可读性来考虑了(我喜欢分开) 谢谢各位了,这个问题结了.顺便问下,存放包含中文字符的话,应该使用varchar2还是nvarchar2?或者说谁更好,好在哪? varchar2就可以了,nvarchar2是支持多语言国际化的扩展 !!请教个sql语句。。 -- 严重鄙视那些无证程序员...... -- 有关Orcale 性能的监视日志 oracle9i 中恢复 oracle10g 中用exp导出的dmp文件出错 关于定时执行作业的问题 oci 读取数据时返回列为空错误 打了震荡波补丁后,oms不能启动了,怎么解决? 如何利用向导导出数据? 帮忙看看这个游标那里写的有问题? 我是初学者,请问各位大虾一个问题? ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 在数据库中查看一个SQL执行一次耗时多少?
第1种用触发器,数据量大时性能用影响
第3种同样
而且oracle本身提供的方法肯定比我们自己写的要好一些。
因为在多用户并发的情况下,可能会出现重号的,因为oracle是读一致的,当没提交时select max取的值有可能一样(这个概率虽然很小,但有这种可能),第1种用触发器,因为用了触发器就会对性能有影响
如果独立的话,我想到的一个缺点就是,必然要建立更多的序列,oracle维护更多的序列时,相对而言是不是加重了它的负担?不过,想区别一下:
如果共用,有什么优缺点?如果独立有什么优缺点?
select seq.nextval from dual一次不管你的自己的事务是否提交,它都会增加。共用也不共用没有什么实质的区别,只是看个人习惯程序的可读性来考虑了(我喜欢分开)