首页 > 其他分享 >Guid与自增长id区别

Guid与自增长id区别

时间:2023-02-12 12:22:30浏览次数:43  
标签:uniqueidentifier 字节 区别 数据库 主键 Guid id IDENTITY

参考  https://www.cnblogs.com/superfeeling/archive/2012/06/26/2564360.html

 

一、产生Guid的方法

1、SqlServer中使用系统自带的NEWID函数: select NEWID()

2、C#中,使用Guid类型的NewGuid方法:

      Guid gid;
              gid = Guid.NewGuid();
              Console.WriteLine(gid);
              Console.WriteLine(Guid.NewGuid());

二、Guid与int自动增加作主键的优缺点

int自动增字段的优点:占用空间小、无需开发人员干预、易读;

  缺点:效率低,数据导入导出的时候很痛苦。

Guid的优点:效率高,数据导入导出方便;缺点是占用空间大,不易读。

业界主流倾向使用Guid作主键。因为主键一般不是给外人看的,而且现在硬盘空间越来越大,不在乎这一点空间。

优点是:
同 IDENTITY 列相比,uniqueidentifier 列可以通过 NewID() 函数提前得知新增加的行 ID,为应用程序的后续处理提供了很大方便。
便于数据库移植,其它数据库中并不一定具有 IDENTITY 列,而 Guid 列可以作为字符型列转换到其它数据库中,同时将应用程序中产生的 GUID 值存入数据库,它不会对原有数据带来影响。
便于数据库初始化,如果应用程序要加载一些初始数据, IDENTITY 列的处理方式就比较麻烦,而uniqueidentifier 列则无需任何处理,直接用 T-SQL 加载即可。
便于对某些对象或常量进行永久标识,如类的 ClassID,对象的实例标识,UDDI 中的联系人、服务接口、tModel标识定义等。
自增长ID有上限, 不同机器产生的guid 不重复
缺点是:
GUID 值较长,不容易记忆和输入,而且这个值是随机、无顺序的。
GUID 的值有 16 个字节,与其它那些诸如 4 字节的整数相比要相对大一些。这意味着如果在数据库中使用 uniqueidentifier 键,可能会带来两方面的消极影响:存储空间增大;索引时间较慢。

 

     1.测试的结果Guid作为主键在以上测试的性能还是优于自动增长Id的。对于Inner join的还没有测试。
      2.对于使用那种类型作为主键,还要根据具体的需要。在数据库迁移或者导入数据的时候自增量字段有可能会出现重复,这无疑是一场恶梦,而Guid格式无疑是首选。但是,使用Guid格式比较复杂,对于程序高度比较麻烦,毕竟Guid比较难记。
      3.自动增长的Id使用的是int型或者bigint型,它们分别占用存储空间为4个字节和8个字节,Guid是uniqueidentifier类型,它占用16个字节。从存储空间上来说,自动增长的Id更节省空间。     
      4.如果要搞分布式数据库的话,这自增量字段就有问题了。因为,在分布式数据库中,不同数据库的同名的表可能需要进行同步复制。一个数据库表的自增量值,就很可能与另一数据库相同表的自增量值重复了,因为不同机器产生的guid 不重复,可以把表合并

标签:uniqueidentifier,字节,区别,数据库,主键,Guid,id,IDENTITY
From: https://www.cnblogs.com/LearningFromyou/p/17100176.html

相关文章

  • IntelliJ IDEA插件
    1.官方汉化:Chinese(Simplified)LanguagePack(软件使用利器)2.文本翻译:Translation(源码阅读利器)可以FQ的使用默认的Google翻译,不能FQ的改成微软翻译即可使用就是右......
  • idea集成maven插件和使用骨架创建maven的java工程
    idea集成maven插件    关闭设置界面 使用骨架创建maven的java工程  新创建的项目目录结构       ......
  • 常用的Python IDE
    常用的PythonIDEIDE(集成开发环境)文本工具类IDEIDLE适用于Python入门Notepad++SublimeText专为程序员开发的第三方专用编程工具专业编程体验多种编程风格工......
  • in 和 exist 区别
    in和exist区别https://blog.csdn.net/lick4050312/article/details/4476333?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefau......
  • android开发kotlin顶级函数和拓展函数的实现原理
    android开发kotlin顶级函数和拓展函数的实现原理//我们编写的源代码在MainActivity.kt下面,如下:funtopTest(){print("123")}funMainActivity.extTest(){pr......
  • ReplaceGoogleCDN扩展 V2版本和V3版本的区别
    文档说明:只记录关键地方;2023-02-11环境:chromium内核备注:firefox目前不支持declarativeNetRequest区别:v2版本允许通过javascript脚本动态修改HTTP请求头、......
  • go: cannot find main module, but found glide.lock 问题解决
    解决方法exportGO111MODULE=auto说明此问题主要是老golang项目构建可能会出现的,新的一般不对有此问题(都基于gomod了)参考资料https://github.co......
  • 数据库必知必会:TiDB(6)TiKV读写与 Coprocessor
    (数据库必知必会:TiDB(6)TiKV读写与Coprocessor)读写与Coprocessor数据写入用户提交写请求,由TiDBServer接收,TiDBServer向PD申请TSO,并获得Region的元数据信息,TiDBServe......
  • Spider理论系列-Re(正则表达式)
    正则是抓取网页数据的入门技能之一,正则可以全局通配你想要的数据,就比如:​​Spider实战系列-抓取《一人之下第三季》_浅辄的技术博客_51CTO博客​​这篇文章里,我想要通过源......
  • idea集成maven插件 使用骨架创建maven的java工具 不使用骨架创建maven的java工程
    idea集成maven插件   使用骨架创建maven的java工具     new-->FIle-->Model选择Maven对勾选上要不不能使用骨架  找到这个,选上下一步   ......