数据库主键设计用自增还是用 GUID比较好

使用自增的方式做主键的优点:

1、数据的存储空间小,节省空间。

2、insert和update操作时使用INT等类型性能会比GUID好,但是优势在15%以下。
   int自增序列 GUID性能测试 
   http://blog.csdn.net/fox123871/article/details/6578922
   
3、可读性会好,对人类友好一点。

5、支持通过函数获取最新的值,如:Scope_Indentity() 。

使用自增的方式做主键的缺点

1、如果经常有合并表的操作,就可能会出现主键重复的情况。

2、数据范围有限制。如果存在大量的数据,可能会超出取值范围。

3、很难处理分布式存储的数据表。

使用GUID做主键的优点:

1、它是独一无二的。

2、出现重复的机会少(几乎不可能)。

3、适合大量数据中的插入和更新操作(能很好解决主键并发的问题)。

4、跨服务器数据合并非常方便。

5、能在业务层就知道目标ID,而不是数据提交给数据库系统后才确定 (有时很重要)

6、GUID是根据硬件设备相关ID以及时间戳生成的,还能大致知道生成的计算机硬件设备、时间等信息

使用GUID做主键的缺点:

1、存储空间大(16 byte),因此它将会占用更多的磁盘大小。

GUID过长,看表现形式,至少都有32位,长的38位,浪费存储空间。
GUID字符串可能是32字符、36字符(带4个“-”分割)、38字符(在36字符的基础上用“{}”标记)

2、看起来会很混乱,对人类不友好。

3、没有内置的函数获取最新产生的guid主键。

总结:
上面列出了GUID和INT两种数据类型做主键优缺点,对于大数据量,建议使用guid做主键。而使用int会得到最佳的性能。
不过,Oracle数据库的圈子里已经习惯用UUID了。保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。
Mysql也原生支持UUID select uuid();

如果考虑到数据迁移、各数据库兼容性等用GUID会比较合适

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值