我有一个查询,它比较许多列的值并返回结果。现在我必须添加另一个要比较的列,这是一个文本字段而不是索引。现在我想而不是这样做,让我们只添加一个名为hash的列,这将是这些列的哈希值,然后我可以只将它与我的代码为这些列生成的哈希进行比较。
1)我想知道这会导致任何性能提升,这有多大益处?
2)mysql是否提供了散列列和存储结果的组合的任何函数,这样我就可以对已经存在的列进行散列,而不必为此编写单独的代码。
3)要使用哪种哈希值,MD5或SHA?
4)这个好主意吗?
我有几百万条记录,预计几个月内会产生数百万条记录,这些记录会为每条记录产生独特的结果吗?
谢谢, 戒日
答案 0 :(得分:1)
1)这可能会导致性能提升虽然我怀疑你手动重新发明已经在DB的索引引擎中实现的内容......所以我建议使用内置的索引机制......
2)是的 - 它有MD5
和SHA
/ SHA1
SQL函数,它们散列字符串,因此您需要将要散列的任何值转换/转换为字符串。
3)这取决于你的数据 - 我猜SHA
是一个不错的选择......
5)它不确定是完全独特的,但不太可能产生碰撞......
我会重新考虑这种方法并使用复合索引。如果复合索引不符合您的需求,请创建一个包含连接值和索引的列...
答案 1 :(得分:0)
尝试:
MD5(CONCAT(field1,field2,field333);