使用自增的方式做主键的优点:
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会比较合适