MySQL中INT和UUID之间的区别

孙为强

如果将主键设置为INTtype(AUTO_INCREMENT)或将其设置为in UUID,则两者在数据库性能(SELECTINSERT等等)之间有什么区别,为什么?

Nikos M.

UUID返回一个通用的唯一标识符(如果导入到另一个数据库,希望也是唯一的)。

引用MySQL文档(重点是我的话):

UUID被设计为在空间和时间上全局唯一的数字即使对两个未相互连接的单独计算机执行了对UUID()的两次调用,它们也会产生两个不同的值

另一方面,简单的INT主ID密钥(例如AUTO_INCREMENT)将为特定的DB和DB表返回一个唯一的整数,但不是通用的(因此,如果导入到另一个DB,则可能会有主键冲突)。

在性能方面,使用auto-incrementover不应有任何明显的区别UUID多数帖子(包括本网站作者的一些帖子)都这样声明。当然,UUID可能要花费更多的时间(和空间),但是对于大多数(如果不是全部)情况,这并不是性能瓶颈。拥有一列Primary Key应该使两个选择等同于性能。请参阅以下参考:

  1. UUID还是不去UUID
  2. 神话GUIDAutoincrement
  3. 性能:UUIDvs auto-incrementcakephp-mysql中
  4. UUID MySQL的性能?
  5. 主键:IDs与GUIDs(编码恐怖)

UUIDvsauto-increment性能结果,取自神话,GUIDvsAutoincrement

在此处输入图片说明

UUID优点/缺点(根据主键IDGUID改编s与s

GUID 优点

  • 在每个表,每个数据库,每个服务器中都是唯一的
  • 允许轻松合并来自不同数据库的记录
  • 允许在多个服务器之间轻松分发数据库
  • 您可以ID在任何地方生成,而不必往返于数据库
  • 大多数复制方案GUID仍然需要

GUID 缺点

  • 它比传统的4字节索引值大4倍;如果您不小心,可能会对性能和存储造成严重影响
  • 调试麻烦(where userid='{BAE7DF4-DDF-3RG-5TY3E3RF456AS10}'
  • 生成的GUIDs应该是部分顺序的,以实现最佳性能(例如,newsequentialid()在SQL 2005上),并允许使用聚簇索引。


笔记

我会仔细阅读提到的参考资料,并UUID根据我的用例决定是否使用。也就是说,在很多情况下,UUIDs确实是更好的选择。例如,可以完全UUID不使用/访问数据库的情况下生成,甚至可以使用UUID已预先计算和/或存储在其他地方的。另外,您可以轻松地概括/更新数据库架构和/或群集方案,而不必担心数据ID中断和引发冲突。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL中=和:=之间的区别

来自分类Dev

UDID和UUID之间的区别

来自分类Dev

Int ...和Int []之间的区别

来自分类Dev

OS XC中的int(*)(...)和int(^)(...)之间的区别?

来自分类Dev

类型之间的区别-C中的int *和int * [100]?

来自分类Dev

类型之间的区别-C中的int *和int * [100]?

来自分类Dev

OS XC中int(*)(...)和int(^)(...)之间的区别?

来自分类Dev

int * a和char * a之间的区别?

来自分类Dev

char []和int []之间的区别

来自分类Dev

int * a和int * a = new int之间的区别

来自分类Dev

在Java中打印char和int数组之间的区别

来自分类Dev

C中的malloc和(int *)malloc之间的区别

来自分类Dev

cython中的np.int,np.int_,int和np.int_t之间的区别?

来自分类Dev

void(int)和void(*)(int)之间的区别

来自分类Dev

const int和int文字之间的区别

来自分类Dev

int和new int()之间的区别

来自分类Dev

mysql中打开的文件和打开的文件之间的区别

来自分类Dev

Mysql中NULL和空值之间的区别

来自分类Dev

MySQL中的NOW(),SYSDATE()和CURRENT_DATE()之间的区别

来自分类Dev

在MySQL中“!= NULL”和“ IS NOT NULL”之间是否有区别?

来自分类Dev

mysql中On Delete Cascade和On Update Cascade之间的区别

来自分类Dev

mysql列值中的(NULL)和空之间的区别

来自分类Dev

R中&和&&&之间的区别

来自分类Dev

Python中[]和[[]]之间的区别

来自分类Dev

Slim中“ /”和“!/”之间的区别

来自分类常见问题

Bash中的$ {}和$()之间的区别

来自分类Dev

C ++中+ =和= +之间的区别

来自分类Dev

XPath中// * /和/ * //之间的区别?

来自分类Dev

};之间的区别 和}在C ++中

Related 相关文章

热门标签

归档