在数据库的设计中,主键的生成策略是一个很值得研究的问题。通常,我们经常会用到INT自增,UUID这两种主键生成策略。今天我就来对这两中种做一个大致的区分总结,以及怎么样更灵活的使用。
使用INT做主键的优点:
1、需要很小的数据存储空间,仅仅需要4 byte 。
2、insert和update操作时使用INT的性能比GUID好,所以使用int将会提高应用程序的性能。
3、index和Join 操作,int的性能最好。
4、容易记忆。
5、支持通过函数获取最新的值,如:Scope_Indentity() 。
使用INT做主键的缺点
1、如果经常有合并表的操作,就可能会出现主键重复的情况。
2、使用INT数据范围有限制。如果存在大量的数据,可能会超出INT的取值范围。
3、很难处理分布式存储的数据表。
使用UUID做主键的缺点
能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。
使用UUID做主键的优点
比较占地方,和INT类型相比,存储一个UUID要花费更多的空间。
使用UUID后,URL显得冗长,不够友好。
UUID+TableCode
以上说了UUID和INT自增的优缺点,他们总会有一些各自的好处和坏处。那么在进行一些多数据表设计的时候,比如多张表,多字段。很容易是我们看起来结构混乱。如果我们把主键做成UUID+TableCode的形式,简单的来说就是给表的列加一个编号并和UUID一起使用。那么,你就会发现表数据结构看起来就会更加的清晰明了,不会造成数据调理混乱。