详解oracle数据库主键SYS_GUID()
在oracle8i往后提供了一个天生不一再的数据的一个函数sys_guid()一共32位,天生的依据首要是时刻和呆板码,具有天下独一性,相同于java中的UUID(都是天下独一的)。 SYS_GUID SYS_GUID同Oracle打点员所行使的传统的序列(sequence)对比具有诸多上风。一个序列天生器只是简朴地建设从给定的出发点开始的一系列整数值,并且它被用在选择告诉式的时辰自动地递增该系列。 序列天生器所天生的数字只能担保在单个实例里是独一的,这就不得当将它用作并行可能长途情形里的首要害字,由于各自情形里的序列也许会天生沟通的数字,从而导致斗嘴的产生。SYS_GUID会担保它建设的标识符在每个数据库 里都是独一的。 另外,序列必需是DML告诉式的一部门,因此它必要一个到数据库的来回进程(不然它就不能担保其值是独一的)。SYS_GUID源自不必要对数据库举办会见的时刻戳和呆板标识符,这就节减了查询的耗损。 行使 SYS_GUID() 天生32位的独一编码。来天生独一主键 譬喻:
这样就能天生独一的主键id了,插入数据时不消插入id列。 SYS_GUID作为一个首要害字?
许多应用措施都依赖序列天生器来建设数据行的首要害字,这些数据行没有一个明明的主值,这也就是说,在这样的数据集里一笔记录的建设就会让数据列产生改变。因此,打点员也许会对在表格中将SYS_GUID用作首要害字而不行使序列数感乐趣。这在工具在差异呆板的差异数据库里天生以及必要在其后归并到一路的环境下很有效。 可是,SYS_GUID所天生的值是一个16位的原始值。序列所天生的整数不会行使16位(的值),除非它到达了10的30次方(每个字节有两位),并且数字是相等奇异的:
较短的值就意味着用于表格和索引的存储空间更少,以及查询会见的时刻更短。 行使SYS_GUID可能序列会在数据库行使周期里的某些处所造成机能上的耗损,对付SYS_GUID而言,机能上的影响在查询时刻和 建设时刻上(在表格里要建设更多的块和索引以容纳数据)。对序列而言,机能上的影响在查询时代,在这个时辰,SGA序列的缓冲区被用光。在缺省环境下,一 个序列一次会缓冲20个值。假如数据库没有行使这些值就封锁了,它们就会被丢失。 SYS_GUID天生的值的另一个明显的不敷之处是,打点这些值会变得坚苦得多。你必需(手动)输入它们可能通过脚原来添补它们,可能将它们作为Web参数来转达。 出于这些缘故起因,将SYS_GUID作为一个首要害字不是一个很好主意,除非是在一个并行的情形里可能但愿停止行使打点序列天生器的环境下。 总结 对比于JAVA的uuid,SYS_GUID利益就是天生的字符串是独一的,但其和UUID有同样的破绽:天生的序列过长而且没有纪律不利便影象。SYS_GUID的应用场景是在于:当数据库某字段配置为独一,则可用次天生(好比主键)。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |