我有一个表,其中一个列存储图像src,它是哈希值,并且该哈希值是从microtime()生成的。现在我有两个选择直接在数据库中存储哈希值或存储该图像的bigint microtime名字是派生出来的。哪会使我的数据库更快。
答案 0 :(得分:1)
我们必须从各方面对此进行分析,以评估所产生的速度故障。
我会做一些假设:
正如@Namphibian所述,由BIGINT的2个操作与CHAR的3个操作组成。
但是我认为速度差异并不大。您可以运行10.000.000连续计算(在while
循环中)并对它们进行基准测试,以找出它们之间的真正差异。
应用程序代码中的速度差异也会线性影响用户,而当流量增加时,DB中的速度差异会非线性地影响用户,因为重叠写入必须等待彼此,并且某些读取必须等待写入完成。
数据库端对于BIGINT几乎与CHAR(40)或BINARY(20)相同,因为等待访问磁盘而不是实际写入磁盘的时间消耗更严重。
数据库端与CHAR(40)或BINARY(20)相比,BIGINT的总是更快,原因有两个:
第二个最佳选项是BINARY(20),因为它保存了一些空间,并且由于长度减少而更容易比较。
BINARY(20)和CHAR(40)都是散列机制的结果并且是随机的,因此比较和排序平均需要更长的时间,因为索引中的随机数据(对于btree索引)需要更多的树遍历fetch(我的意思是在多个值的上下文中,而不是单个值)。
答案 1 :(得分:0)
这里可能适用一项重要的科学原则:不要丢失原始数据。你永远不知道你可能需要它。