JavaEE/SQL:主键类型之间是否存在显著的性能滞后?
目前我正在学习JavaEE技术的一些基础知识。我遇到了一个特殊的项目,并深入研究了底层数据库结构。 在服务器端,我研究了一个Java函数,该函数创建一个长度为32个字符的主键(基于连接时间、随机散列和额外的加密nonce) 我对使用这样一个主键所造成的性能损失的估计感兴趣。如果没有安全理由创建此类唯一的ID,那么让底层数据库从0开始创建新的递增的主ID不是更好吗JavaEE/SQL:主键类型之间是否存在显著的性能滞后?,sql,jql,Sql,Jql,目前我正在学习JavaEE技术的一些基础知识。我遇到了一个特殊的项目,并深入研究了底层数据库结构。 在服务器端,我研究了一个Java函数,该函数创建一个长度为32个字符的主键(基于连接时间、随机散列和额外的加密nonce) 我对使用这样一个主键所造成的性能损失的估计感兴趣。如果没有安全理由创建此类唯一的ID,那么让底层数据库从0开始创建新的递增的主ID不是更好吗 如果使用数字而不是字符串,SQL/JQL搜索不是会更快吗?使用数字可能会更快,但是如果需要两个选项之间的性能比率,则应该使用测试用例来
如果使用数字而不是字符串,SQL/JQL搜索不是会更快吗?使用数字可能会更快,但是如果需要两个选项之间的性能比率,则应该使用测试用例来衡量 我认为数字比较和字符串比较本身不会带来很大的性能优势。然而:
- 较大的字段通常意味着每个表块的数据量较少,因此在完全扫描的情况下,您必须从数据库中读取更多的块(速度会较慢)
- 因此,较大的键通常意味着每个索引块的键较少,因此在索引扫描的情况下,您必须读取更多的索引块(速度会较慢)
- 更大的字段更大,所以根据定义,它们的空间效率更低
还要注意的是,使用随机ID通常比序列号更“群集化”,因为序列/自动编码需要集中管理(尽管这可以通过使用诸如。目前大多数持久性框架都支持这种技术来缓解)。感谢您的回答!你有关于数据库中表块机制的链接吗?@John Rumpel这是依赖于DBMS的,你应该检查你的特定数据库文档