gpt4 book ai didi

mysql - 存储哈希值或生成哈希值的 bigint 变量哪个更好

转载 作者:行者123 更新时间:2023-11-29 03:09:20 26 4
gpt4 key购买 nike

我有一个表,其中一列存储哈希值中的图像 src 并且该哈希值是从 microtime() 生成的,现在我有两种选择将哈希值直接存储在数据库中或存储图像所来自的 bigint microtime名称是派生的。这将使我的数据库更快。

最佳答案

我们必须从各个方面进行分析,以评估导致哪些速度故障。

我会做一些假设:

  • 此数据将用作标识符(主键、唯一键、复合键);
  • 此数据用于搜索和加入;
  • 您正在使用诸如 SHA1 之类的散列算法,它会产生一个 40 个字符的十六进制编码数据字符串(MD5 会产生一个 32 个字符的十六进制编码数据字符串,如果您使用的是 MD5,那么下面所说的都可以适应 MD5);
  • 您可能有兴趣将哈希值的十六进制值转换为二进制值,以减少一半所需的存储空间并提高比较速度;
应用端的

插入更新:

正如@Namphibian 所述,它由 2 个 BIGINT 操作和 3 个 CHAR 操作组成。

但我认为速度差异确实没有那么大。您可以运行 10.000.000 次连续计算(在 while 循环中)并对它们进行基准测试以找出它们之间的真正区别。

此外,应用程序代码中的速度差异会以线性方式影响用户,而数据库中的速度差异会在流量增加时以非线性方式影响用户,因为重叠的写入必须相互等待,而一些读取必须等待写入完成。

插入更新在数据库端:

BIGINT 与 CHAR(40) 或 BINARY(20) 几乎相同,因为更严重的时间消耗是等待访问磁盘而不是实际写入磁盘。

数据库端的

选择加入:

与 CHAR(40) 或 BINARY(20) 相比,BIGINT 总是更快,原因有二:

  • BIGINT占8个字节,CHAR(40)占40个字节,BINARY(20)占20个字节;
  • BIGINT 的连续递增性质使其可预测且易于比较和排序。

第二个最佳选择是 BINARY(20),因为它节省了 一些 空间,并且由于减少了长度而更容易比较。

BINARY(20) 和 CHAR(40) 都是哈希机制的结果并且是随机的,因此比较和排序平均需要更长的时间,因为索引中的随机数据(对于 btree 索引)需要更多的树遍历fetch(我的意思是在多个值的上下文中,而不是针对一个值)。

关于mysql - 存储哈希值或生成哈希值的 bigint 变量哪个更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10731392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com