Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaEE/SQL:主键类型之间是否存在显著的性能滞后?_Sql_Jql - Fatal编程技术网

JavaEE/SQL:主键类型之间是否存在显著的性能滞后?

JavaEE/SQL:主键类型之间是否存在显著的性能滞后?,sql,jql,Sql,Jql,目前我正在学习JavaEE技术的一些基础知识。我遇到了一个特殊的项目,并深入研究了底层数据库结构。 在服务器端,我研究了一个Java函数,该函数创建一个长度为32个字符的主键(基于连接时间、随机散列和额外的加密nonce) 我对使用这样一个主键所造成的性能损失的估计感兴趣。如果没有安全理由创建此类唯一的ID,那么让底层数据库从0开始创建新的递增的主ID不是更好吗 如果使用数字而不是字符串,SQL/JQL搜索不是会更快吗?使用数字可能会更快,但是如果需要两个选项之间的性能比率,则应该使用测试用例来

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

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


如果使用数字而不是字符串,SQL/JQL搜索不是会更快吗?

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

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

  • 较大的字段通常意味着每个表块的数据量较少,因此在完全扫描的情况下,您必须从数据库中读取更多的块(速度会较慢)
  • 因此,较大的键通常意味着每个索引块的键较少,因此在索引扫描的情况下,您必须读取更多的索引块(速度会较慢)
  • 更大的字段更大,所以根据定义,它们的空间效率更低
请注意,我们讨论的是数据大小,而不是数据类型:很可能8字节整数不会比8字节字符串更有效


还要注意的是,使用随机ID通常比序列号更“群集化”,因为序列/自动编码需要集中管理(尽管这可以通过使用诸如。目前大多数持久性框架都支持这种技术来缓解)。

感谢您的回答!你有关于数据库中表块机制的链接吗?@John Rumpel这是依赖于DBMS的,你应该检查你的特定数据库文档