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

来源:-

西尔104

2015-01-25 01:47

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


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

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

写回答 关注

1回答

  • qq_北笙_0
    2017-02-08 10:42:09

    对于大数据量,建议使用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做主键将会添加到表上的所以其他索引中,因此会降低性能。


性能优化之MySQL优化

了解MySQL数据库优化的方法和技巧,在课程中共同探讨一起学习吧

101664 学习 · 221 问题

查看课程

相似问题