孙为强*_*孙为强 19 mysql performance primary-key
如果我设置主键是INT类型(AUTO_INCREMENT)或将其设置在UUID,有什么这两者之间的数据库性能(差异SELECT,INSERT等等),为什么?
Nik*_* M. 31
UUID返回一个通用的唯一标识符(如果导入到另一个DB,也希望也是唯一的).
引用MySQL doc(强调我的):
UUID被设计为在空间和时间上全球唯一的数字.对UUID()的两次调用预计会生成两个不同的值,即使这些调用是在两个彼此 未连接的独立计算机上执行的.
另一方面,简单的INT主id键(例如AUTO_INCREMENT)将返回特定DB和DB表的唯一整数,但这不是普遍唯一的(因此,如果导入到另一个DB,则可能存在主键冲突).
在性能方面,使用auto-incrementover 不应有任何明显的差异UUID.大多数帖子(包括本网站作者的一些帖子)都是这样说的.当然UUID可能需要更多的时间(和空间),但这不是大多数(如果不是全部)情况的性能瓶颈.有一个列Primary Key应该使两个选择与性能相等.见下面的参考:
UUID不是UUID?GUID对比AutoincrementUUIDvsauto-incrementUUID 在MySQL中的表现?IDs与GUIDs(编码恐怖)(UUIDvs auto-increment性能结果,改编自Myths,GUIDvsAutoincrement)

UUID优点/缺点(改编自主键:IDs与GUIDs)
GUID优点
- 每个表,每个数据库,每个服务器都是唯一的
- 允许轻松合并来自不同数据库的记录
- 允许跨多个服务器轻松分发数据库
- 您可以
ID在任何地方生成s,而不必往返数据库- 大多数复制方案
GUID无论如何都需要列
GUID缺点
- 它比传统的4字节索引值大4倍; 如果你不小心,这可能会产生严重的性能和存储影响
- 调试很麻烦(
where userid='{BAE7DF4-DDF-3RG-5TY3E3RF456AS10}')- 生成的
GUIDs应该是部分顺序的以获得最佳性能(例如,newsequentialid()在SQL 2005上)并且能够使用聚簇索引.
我会仔细阅读上面提到的参考文献,并UUID根据我的用例决定是否使用.也就是说,在许多情况下,UUIDs确实更可取.例如,一个人可以UUID在不使用/访问数据库的情况下生成s,或者甚至使用UUID已经预先计算和/或存储在其他地方的s.此外,您可以轻松地概括/更新数据库架构和/或群集方案,而无需担心ID破坏和导致冲突.
| 归档时间: |
|
| 查看次数: |
15179 次 |
| 最近记录: |