0

目前我正在学习一些 Java EE 技术的基础知识。我遇到了一个特定的项目,并深入了解了底层数据库结构。在服务器端,我研究了一个 Java 函数,该函数创建一个长度为 32 个字符的主键(基于连接时间、随机散列和额外的加密随机数)。

我对使用这样的主键造成的性能损失的估计感兴趣。如果没有安全理由来创建这种唯一的 ID,让底层数据库从 0 开始创建新的递增的初选不是更好吗?

使用数字而不是字符串时,SQL/JQL 搜索不会快得多吗?

4

1 回答 1

1

使用数字可能会更快,但如果您需要两个选项之间的性能比,您应该使用测试用例来衡量它。

我不认为数字比较与字符串比较本身会带来很大的性能优势。然而:

  • 更大的字段通常意味着每个表块的数据更少,因此您必须在全扫描的情况下从 DB 读取更多块(它会更慢)
  • 因此,较大的键通常意味着每个索引块的键更少,因此您必须在索引扫描的情况下读取更多的索引块(它会更慢)
  • 更大的字段,嗯,更大,所以根据定义,它们的空间效率较低。

请注意,我们讨论的是数据大小而不是数据类型:8 字节整数很可能不会比 8 字节字符串更有效。

另请注意,使用随机 ID 通常比序列号更“可聚类”,因为序列/自动数字需要集中管理(尽管可以使用诸如Hi-Lo 算法之类的技术来缓解这种情况。大多数当前的持久性框架都支持这种技术)。

于 2013-05-29T10:18:01.937 回答