数据库主键

时间:2011-06-15 07:47:22

标签: java database

将数据库密钥作为String或Long更快哪一个更快?如果差异是微秒,则与我们的应用无关。该表有数千条记录/行。如果Long更快,如何将String转换为Long,是否有一些Java API,以便可以将唯一的String转换为唯一的长?

4 个答案:

答案 0 :(得分:2)

通常,构建,维护和扫描VARCHARString)的索引应该比BIGINTLong)索引慢。

要查看差异对您的用例是否重要,我建议您创建两个预期大小的表并运行预期的操作(SELECTINSERTUPDATE,{ {1}})反对他们,并衡量结果......

通常,使用此语句,您可以将工作委派给数据库:

DELETE

答案 1 :(得分:1)

  

将数据库密钥设置为String或Long更快哪一个?

long很可能比String更快。首先,处理器可以“自然地”处理long类型的值,而String必须通过软件来处理。此外,字符串可能比长值占用更多内存,这意味着缓存承受更大的压力,并且必须从磁盘加载/保存更多数据。

  

如果差异是微秒,则与我们的应用无关。该表有数千条记录/行。

所以这取决于操作。如果你

  

如果Long更快,如何将String转换为Long,是否有一些Java API可以将唯一的String转换为唯一的长?

您可以使用hash code从String派生int。您将从此方法获得的内容将在允许的范围内很好地分布,但不保证是唯一的。通常,不可能从字符串派生唯一的int,因为字符串比long长。

想象一下你构建了一个包含所有长值的十进制表示的巨型表。现在有一个微不足道的长< - >两者之间的字符串映射。但是这个表仍然不包含字符串“hello world”,并且你可以使用它来代表这个字符串。

一般来说,我的建议是:如果您的源数据是自然类型的字符串,请使用它并让数据库进行优化。保存“数千”条目的表对于任何当前数据库都不是问题。也许你可以通过创建聪明的索引来帮助提高性能。

答案 2 :(得分:0)

数据库不使用Java类型,它们使用可以转换/映射到Java的SQL类型。

您应该使用自然适合您应用的类型,因为正确性通常比速度更重要。

longLongString之间的差异在Java中是亚微秒级,如果这对您很重要,则不应使用数据库进行查找,而是缓存内存中的所有数据,并使用像TLongObjectHashMap

这样的集合

答案 3 :(得分:0)

没有明智的方法可以回答这个问题。主键是数据库的逻辑功能,而性能由物理实现以及要对其执行的操作决定。你不妨问一下“红色汽车会比蓝色汽车快吗?”

对于不同数据类型的两个不同的键约束在任何情况下都不是功能上等同的。因此,即使给出必要的上下文,它也可能是一个奇怪的,可能不是非常有用的比较。