为了账号安全,请及时绑定邮箱和手机立即绑定

关于数据库表的主键ID的数据类型(使用GUID和自增长类型)的疑惑

我发现好多的项目中现在流行的数据表主键是GUID,一般在数据库中的存储类型为char(36)。但是我个人感觉这个设计很浪费资源:一是字段长度是36(点位36字节),而自增长只占8字节(int);二是貌似在此字段上建立索引没有什么实际作用(GUID中字符无序的);三是在二、三范式下关联查询时主键偏偏又是关联字段,增加了记录的行长度的同时查询用索引又无实际效果。在这三种情况下我觉得用GUID做主键简直是“暴殄天物”(个人认为),可为什么还有好多人这么用呢?而且在百度找这方面的资料时,看到有人说用自增长作主键的人都是国内不专业的开发人员(听那口气貌似对这样的人很不屑的样子)。


我就疑惑了,用GUID作主键就很专业吗,那么对于数据查询速度的考虑呢?

老师,你们在开发过程中是用什么做主键的呢,很纠结,希望老师能回复下,谢谢

正在回答

1 回答

对于大数据量,建议使用guid做主键。而使用int会得到最佳的性能。公司一般都会是为了安全防止注入等让别人获取不到数据,一般都是数据会加密的,而int作为主键的确适合数据,但是如果数据大量超出int呢。而且他很难控制分布式的数据表。

使用INT做主键的优点:

    1、需要很小的数据存储空间,仅仅需要4 byte 。

    2、insert和update操作时使用INT的性能比GUID好,所以使用int将会提高应用程序的性能。

    3、index和Join 操作,int的性能最好。

    4、容易记忆。

    5、支持通过函数获取最新的值,如:Scope_Indentity() 。

使用INT做主键的缺点

    1、如果经常有合并表的操作,就可能会出现主键重复的情况。

    2、使用INT数据范围有限制。如果存在大量的数据,可能会超出INT的取值范围。

    3、很难处理分布式存储的数据表。

使用GUID做主键的优点:

    1、它是独一无二的。

    2、出现重复的机会少。

    3、适合大量数据中的插入和更新操作。

    4、跨服务器数据合并非常方便。

使用GUID做主键的缺点:

    1、存储空间大(16 byte),因此它将会占用更多的磁盘大小。

    2、很难记忆。join操作性能比int要低。

    3、没有内置的函数获取最新产生的guid主键。

    4、GUID做主键将会添加到表上的所以其他索引中,因此会降低性能。


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于数据库表的主键ID的数据类型(使用GUID和自增长类型)的疑惑

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信