【问题标题】:Search by hashing mysql columns通过散列 mysql 列进行搜索
【发布时间】:2011-10-10 10:59:58
【问题描述】:

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

1) 我想知道这是否会导致性能提升以及这有多大好处?

2) mysql 是否提供任何函数来散列列组合并存储结果,以便我可以对已经存在的列进行散列,而无需为此编写单独的代码。

3) 选择哪个哈希,MD5 还是 SHA?

4) 这是个好主意吗?

我有几百万条记录,预计几个月内还会生成几百万条记录,对这些记录进行散列处理是否会为每条记录产生独特的结果?

谢谢, 哈沙

【问题讨论】:

    标签: mysql hash


    【解决方案1】:

    1) 这可能会提高性能,尽管我怀疑您手动重新发明了已经在数据库的索引引擎中实现的内容...所以我建议使用内置索引机制...

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

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

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

    5) 它不一定是完全唯一的,但不太可能产生冲突...

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

    【讨论】:

    • 谢谢@Yahia,我担心有问题的列是文本类型并且包含大字符串。如果我对此进行索引,那么对于数百万条记录,它将需要大量内存来存储这些索引。如果我可以将此列与其他使用的列一起散列,然后索引该散列列,那么这应该会使查询执行得更快。
    • 根据我的回答 - 你可以这样做,它可能会让它更快一点......但我不推荐它......这些天空间相当便宜,通常不是争论重新发明轮子恕我直言...
    【解决方案2】:

    试试:

    MD5(CONCAT(field1,field2,field333);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      相关资源
      最近更新 更多