目前我正在学习一些 Java EE 技术的基础知识。我遇到了一个特定的项目,并深入了解了底层数据库结构。在服务器端,我研究了一个 Java 函数,该函数创建一个长度为 32 个字符的主键(基于连接时间、随机散列和额外的加密随机数)。
我对使用这样的主键造成的性能损失的估计感兴趣。如果没有安全理由来创建这种唯一的 ID,让底层数据库从 0 开始创建新的递增的初选不是更好吗?
使用数字而不是字符串时,SQL/JQL 搜索不会快得多吗?
使用数字可能会更快,但如果您需要两个选项之间的性能比,您应该使用测试用例来衡量它。
我不认为数字比较与字符串比较本身会带来很大的性能优势。然而:
请注意,我们讨论的是数据大小而不是数据类型:8 字节整数很可能不会比 8 字节字符串更有效。
另请注意,使用随机 ID 通常比序列号更“可聚类”,因为序列/自动数字需要集中管理(尽管可以使用诸如Hi-Lo 算法之类的技术来缓解这种情况。大多数当前的持久性框架都支持这种技术)。