Oracle8i引入了SYS_GUID这个概念,系统根据当前时间和机器码,生成全球唯一的一个序列号。它同经常使用的传统的序列相比具有诸多优势。
Oracle8i引入SYS_GUID的概念,系统根据当前时间和机器码生成世界上唯一的序列号。与常用的传统序列相比,它有许多优点。
据称,序列生成器只是从给定的起始点开始创建一系列整数值,用于在选择语句时自动递增该系列。
序列生成器生成的数字只能保证在单个实例中唯一,因此不适合在并行或远程环境中用作主关键字,因为它们各自环境中的序列可能生成相同的数字,从而导致冲突。SYS_GUID保证它创建的标识符在每个数据库中都是唯一的。
此外,该序列必须是DML语句的一部分,因此它需要到数据库的往返行程。SYS_GUID是从时间戳和机器标识符中派生出来的,不需要访问数据库,节省了查询消耗。
例如:作者在设计公司的员工表时首先启用了sys_guid,然后在一次大的更改后将其更改为sequence,因为它必须与传统系统接口。对别人,1。1.sys_guid的32位长度太长,浪费存储空间。2.sys_guid不好记。在一些运维中,不像数字型主键那么容易记住。数字主键甚至可以有昵称的功能。
当然,在某些情况下,主键是通过用户定义的函数生成的具有一定业务意义和唯一标识的字符串。
话题讨论:
1.目前你是如何使用工作中生成的主键的,原因是什么?
2.上述每种方法的优缺点是什么?
3.特殊情况下的主键生成,这是一个特殊的场景,是如何实现的。
精彩回答:
东风九哥:
1.目前你是如何使用工作中生成的主键的,原因是什么?
我目前用SEQUENCE,因为我尽量用默认的东西
2.上述每种方法的优缺点是什么?
序列:
优点:默认方法,使用方便
缺点:影响数据迁移,不支持分布式计算环境
系统_GUID:
优势:完美支持分布式计算环境,全球独一无二
缺点:在发电过程中消耗更多的资源
自定义主键:
优点:可以根据需要实现任意格式的主键
缺点:需要自己写代码或者调用第三方库函数来生成,效率不高,不能保证唯一性
3.特殊情况下的主键生成,这是一个特殊的场景,是如何实现的。
如果你让我自定义主键,我会以模块名+时间戳的形式生成它
renxiao2003:
1.目前你是如何使用工作中生成的主键的,原因是什么?
好久没用甲骨文了。我记得至少八九年前用过。后来我用PostgreSQL,MySQL,SQL Server等数据库,做了简单的对比。Oracle数据库从8,8i一直使用到11g。请记住,在SQL Server数据库中也支持GUID,但是我基本上不使用它。在原来的社保系统中,主键使用的是序列,对于每个表序列都有特定的含义。后来在SQL Server中使用时,因为主键也有特定的含义,所以使用用户定义的规则生成。不使用GUID的主要原因是我们系统的主键是十位数。如果使用GUID,会造成存储的浪费空。而且因为我们的系统不是全局系统,所以不能用GUID。
2.上述每种方法的优缺点是什么?