我试图了解数据库管理id /序列生成以用作PK或者让应用程序只生成自己的ID(例如随机的64位数字)是否更高效。
我怀疑应用程序+随机生成将更具性能,因为管理的并发性较少,但是如果数据库生成序列,那么它总是知道接下来的内容是有序的并且可以优化索引维护。 / p>
答案 0 :(得分:0)
PK背后的理念是它们在设计上是独一无二的。使用64位随机数在设计上并不是唯一的 - 因此您必须为PK冲突准备代码,然后随机化新ID,并将新行再次提交到数据库。这可能很麻烦。让编写者在并发中插入新数据最终会使这些问题更加严重。
数据库可以很好地生成唯一的ID - 毕竟,PK问题是非常标准的东西,并且有很好的标准解决方案。
ID生成器本身就是一个瓶颈 - 因为它必须确保唯一性,即使它是从多个并发的会话中调用的。例如,Oracle有序列生成器,它可以预先生成并“缓存”每个会话的即将到来的数字,从而解决并发问题。
我们可以从Tom Kyte先生那里学到一件重要的事情:使用表格中的实际数据和实际负载来衡量您的用例。这是真正智慧的唯一来源:)
我的两分钱:数据库引擎差异很大!分享您正在使用的数据库有助于获得更好的答案。