GUID做主键真的合适吗】的更多相关文章

在一个分布式环境中,我们习惯使用GUID做主键,来保证全局唯一,然后,GUID做主键真的合适吗? 其实GUID做主键本身没有问题,微软的很多项目自带DB都是使用GUID做主键的,显然,这样做是没有问题的.然而,SQL Server默认会将主键设置为聚集索引,使用GUID做聚集索引就有问题了.很多时候程序员容易接受SQL Server这一默认设置,但无序GUID做聚集索引显然是低效的. 那么,我们在项目中如何避免这一问题呢? 主要的思路还是两方面——方案一,选择合适的列作为聚集索引:方案二,使用有…
使用Guid做主键和int做主键性能比较 在数据库的设计中我们常常用Guid或int来做主键,根据所学的知识一直感觉int做主键效率要高,但没有做仔细的测试无法 说明道理.碰巧今天在数据库的优化过程中,遇到此问题,于是做了一下测试. 测试环境: 台式电脑 Pentiun(R) 4 Cpu 3.06GHz Win XP professional  1.5G DDR RAM  SQL Server 2005 个人版 测试过程:首先创建测试数据库Test1.创建Test_Guid表,创建Test_In…
场景: 产品表数据量较大想用Guid做表的主键,并在此字段上建立聚簇索引. 因为Guid是随机生成的,生成的值大小是不确定的,每次生成的数可能很大,也可能很小.这样会影响插入的效率 1.NEWSEQUENTIALID和newid()的区别 NEWSEQUENTIALID() 和 NEWID()都可以产生uniqueidentifier类型的,GUID.NEWID()产生的GUID是无序的,随机的. 而NEWSEQUENTIALID()是SQL SERVER2005新特性,NEWSEQUENTIA…
1.在经常需要做数据迁移的系统中,建议用Guid.并且在相应的外键字段,也就是用来做连接查询的字段添加非聚集索引,对于改善性能有极大的好处.where条件的字段也可以适当添加非聚集索引. 2.在使用Guid类型作为主键时,数据类型应为uniqueidentifier,并且一定要记得取消主键的“聚集索引” 3.对于不需要做迁移,或小型系统,用int做主键还是很方便的,并且在效率方面还是有一定提升的. 原文地址http://blog.csdn.net/fox123871/article/detail…
我们公司的数据库全部是使用GUID做主键的,很多人习惯使用int做主键.所以呢,这里总结一下,将两种数据类型做主键进行一个比较. 使用INT做主键的优点: 1.需要很小的数据存储空间,仅仅需要4 byte . 2.insert和update操作时使用INT的性能比GUID好,所以使用int将会提高应用程序的性能. 3.index和Join 操作,int的性能最好. 4.容易记忆. 5.支持通过函数获取最新的值,如:Scope_Indentity() . 使用INT做主键的缺点 1.如果经常有合并…
记得A项目组是一个物流管理系统,后台采用了Oracle数据库.在系统中的核心表托运单表中,关于主键采用何种数据类型,是 sequence 还是用GUID , 大家起了争论. 从网络搜索得到的结论看,一般的意见总结为:1. SYS_GUID()比sequence复杂:2.SYS_GUID做主键,则表.索引存储开销多:3.SYS_GUID索引查询比sequence慢: 小结 从实践来看, 使用SYS_GUID() 做主键的优点多于负面影响.特别是在多个数据库数据集成时,GUID 的优点显而易见. 综…
InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的; (2)不可能在非叶子结点命中; (3)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层; 2.如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NU…
一.目标:整理数据 有的人有强迫症,他们会为一系列数据的断档而抓狂. 一方面,Id为3这一行确实发生过一些事情,为什么这个查询不返回Id为3的这一行?这条记录数据丢失了吗?那个Column到底是什么?我要为这条数据的丢失负责吗? 二.反模式:填充角落 大多数人对于断档的第一反应就是想要填补其中的空缺.对此,可能有两种做法: 1.不按照顺序分配编号 你可能想要在插入新行时,通过遍历表,将找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键机制.随着你不断地插入新行,断档就被填补起来了…
当我们默认新建一个ASP.NET MVC项目的时候,使用的身份认证系统是ASP.NET Identity.但是这里的Identity使用的主键为String类型的GUID.当然这是大多数系统首先类型.但是因为历史原因,而我们公司所有项目主键都是用的Int类型(这里不讨论int和GUID的优劣)所以默认的String类型GUID就不能满足我们的需求,所以进行一些扩展,让其支持Int类型.下图为默认使用String做主键的ASP.NET MVC ApplicationUser继承自IdentityU…
InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的; (2)不可能在非叶子结点命中; (3)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层; 2.如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NU…