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