Database GUID与int ID自动增量
我正试图将我的设计敏感度从LAMP堆栈转移到Microsoft堆栈,我刚刚想到了一件事——我什么时候想使用GUID?与旧的、可靠的自动递增int相比,它有哪些优点/缺点?guid有一个问题: 因为它们不是连续的,所以数据库必须努力更新索引。对于顺序id,它通常可以将其附加到末尾(或多或少)。由于guid是随机的,所以它必须将其放入现有块中。也就是说,我们对一些表使用guid,即使在相当重的负载下,它们也能正常工作。“旧的、可靠的自动递增int”很大程度上取决于数据库的可伸缩性。当你有一个至少有两个主程序的设置时,自动递增将停止工作。当然,解决这个问题并不太困难,因为这是一个非常普遍的问题;不同的数据库引擎可以协调主机之间的序列,例如,从任何给定序列中只能分配一个主机 当您开始对数据进行切分时,通常希望从密钥中了解切分。自动递增的id不包含关于哪个碎片应该承载该记录的信息 GUID以不同的方式解决问题;两个不同的主机具有不同的主机标识符(通常是MAC地址)。由于在计算新的GUID时使用了它,不同的主控器无法创建冲突的GUID。此外,由于主机是ID的一部分,因此可以使用它直接标识保存记录的碎片Database GUID与int ID自动增量,database,guid,Database,Guid,我正试图将我的设计敏感度从LAMP堆栈转移到Microsoft堆栈,我刚刚想到了一件事——我什么时候想使用GUID?与旧的、可靠的自动递增int相比,它有哪些优点/缺点?guid有一个问题: 因为它们不是连续的,所以数据库必须努力更新索引。对于顺序id,它通常可以将其附加到末尾(或多或少)。由于guid是随机的,所以它必须将其放入现有块中。也就是说,我们对一些表使用guid,即使在相当重的负载下,它们也能正常工作。“旧的、可靠的自动递增int”很大程度上取决于数据库的可伸缩性。当你有一个至少有两
第三种选择是根本不使用代理键(既不使用自动递增整数,也不使用guid) 根据您的经验,除了自动增量ID之外,您从未需要过任何东西,这可能表明GUI通常是一种解决问题的方法。当您遇到您熟悉的模式不起作用的需求时,使用它们。微观性是无关紧要的
我见过的唯一现实的场景是合并来自两个源的表。我建议使用int-ID而不是Guid,原因如下:
- Int ID的大小为4字节(32位),而Guid的大小为16字节(128位),是它的4倍。在这种情况下,您可能会遇到性能问题和存储问题
- 默认情况下,GUID不是顺序的(请小心)
- 很容易将表之间的链接和关系可视化