讨论:GUID与int自增列的问题

近日,在CSDN社区中,看到有人在讨论:GUID与int自增列的问题,个人觉得很不错,故整理了一下大家的观点,以观后效!我没有真正的用过GUID类型。所以就不发言了。且看各位高手表演:

如果你看到这段文字,说明您正使用RSS阅读或转自《一棵树-博客园》,原文地址:http://www.cnblogs.com/atree/archive/2011/05/04/SQL-SERVER-GUID-INT.html

楼主:

谈谈GUID的问题!!!!!!!!!!!!

一、主键用int自增列好,还是用GUID好

二、如果用GUID做主键,是所有表都用GUID做主键,还是只需要将常用的表,如新闻系统中,只将文章表的主键用GUID?

沙发:

个人感觉用int自增列好,已经用N年了。
不过你如果要用GUID的话,主要看你什么用途?

2楼:

要说好处理的话,还是自增列好处理些 个人感觉啊

不过全局唯一标识符,也就是GUID可以唯一指定一项 也不错 我觉得这个要看具体情况来分析了

3楼:

一般的系统都是采用INT自增列。
GUID 一般用在大数据量的处理上。
4楼:

GUID 主要用于在拥有多个节点、多台计算机的网络中,分配必须具有唯一性的标识符

6楼:

一般用自增的。需要唯一标示的用GUID。
一般用GUId的就是用户信息表。也就是系统里最抽象的对象。
其他的一般不用。使用GUID对操作也不是很方便。但是辨别是很清晰。
如果是新闻系统用自增就行了

7楼:如果没有并行的数据表,或者要进行复制合并,就没必要使用GUID,用自增列挺好.

8楼:

分布式处理系统里最好用GUID。大的系统一般用这个
单机的系统或者小软件,一般用子增列或者自定义的编号做主键就可以了

10楼:

需要数据库同步的自增id可能有问题,可能会出现id重新生成。
但是一般的情况下还是自增id方便点。

13楼:

在SQL Server中使用32全球唯一码(GUID)可用newid来获取。

insert into [User](id,name,sex,password)values(newid(),'xp','1','1234')

其中id数据列要求是36位char型或Uniqueidentifier 型

以下内容来自SQL Server联机帮助
可以包含对 GUID 数据类型的引用,该数据类型用于存储全局唯一标识符。在更新查询和插入源查询中可以调用 newid( ) 函数,以生成新的 GUID 存储在数据库内。

创建选择查询时,允许对 GUID 类型列执行的唯一操作是基于等于(= 和 <>)的比较。

获取数据表主键sql:使用GUID作为数据表主键的好处 
 使用GUID作为数据表主键的好处数据表主健通常采用以下三种方式: 1. 自动递增值。2. 唯一名称。这
个是使用自己定义的算法来生成一个唯一序列号。 3. GUID(全局唯一标识符)。GUID与自动递增值及唯一名
称比较GUID在客户端生成,由GUID的特性决定,通过GUID生成的值可能出现重复的机会几乎等于零,因此保
证在插入表的时候主键值唯一。可以方便处理分布式数据的提交,比如:分店数据向总店提交――直接将该部分
数据插入即可。支持离线数据处理。对本地数据包进行新增记录时即可将该数据表的关键字段值赋值,其处理
方法是与在线新增时是一致的。自动递增值 在数据库服务器端生成,由于该值是由数据库系统内部处理的,亦
保证其唯一性,但由于其是在数据库服务器端生成,因此必须将该值返回客户端,客户端通过该值过行其它操
作。比如一张单据(主从表)是使用自动递增值,当插入单据抬头后,必须将单据抬头的关键字段值返回,再
插入单据明细(单据明细是通过单据抬头关键字段进行关联的)。不能很好处理分布式数据的提交,比如:分
店数据向总店提交――提交数据时必须重新生成该数据表的关键字段值,以保证该字段值唯一。

16楼:

主键用int性能好。GUID是16字节,数据量大时,本身占的空间就多了。
一般我们主键都是选择聚集索引的,GUID生成是随机的,会使插入数据时,记录会放在中间。
而int的自增长列,可以确保新记录都加在表尾。
如果涉及到多数据库数据同步,就在表加一列guid,做唯一标识。

PS:虽然这个帖子已经有2岁了,不过到现在我还是搞不清用哪一个比较好,或者说在什么时候用哪一个比较好。因为用习惯了自增列,没有特殊情况,不愿用GUID。

posted on 2011-05-04 23:36  zock  阅读(6828)  评论(4编辑  收藏  举报