通过散列mysql列进行搜索

时间:2011-10-10 10:59:59

标签: mysql hash

我有一个查询,它比较许多列的值并返回结果。现在我必须添加另一个要比较的列,这是一个文本字段而不是索引。现在我想而不是这样做,让我们只添加一个名为hash的列,这将是这些列的哈希值,然后我可以只将它与我的代码为这些列生成的哈希进行比较。

1)我想知道这会导致任何性能提升,这有多大益处?

2)mysql是否提供了散列列和存储结果的组合的任何函数,这样我就可以对已经存在的列进行散列,而不必为此编写单独的代码。

3)要使用哪种哈希值,MD5或SHA?

4)这个好主意吗?

我有几百万条记录,预计几个月内会产生数百万条记录,这些记录会为每条记录产生独特的结果吗?

谢谢, 戒日

2 个答案:

答案 0 :(得分:1)

1)这可能会导致性能提升虽然我怀疑你手动重新发明已经在DB的索引引擎中实现的内容......所以我建议使用内置的索引机制......

2)是的 - 它有MD5SHA / SHA1 SQL函数,它们散列字符串,因此您需要将要散列的任何值转换/转换为字符串。

3)这取决于你的数据 - 我猜SHA是一个不错的选择......

4)我不这么认为......这是对数据库已经内置的东西的重新发明,并不意味着你摆脱了索引...如果你希望这个表现良好你将会必须使用哈希值索引列...

5)它不确定是完全独特的,但不太可能产生碰撞......

我会重新考虑这种方法并使用复合索引。如果复合索引不符合您的需求,请创建一个包含连接值和索引的列...

答案 1 :(得分:0)

尝试:

MD5(CONCAT(field1,field2,field333);