跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 如果一个表的几乎全部列加起来要求唯一,如果建唯一索引吗
未分類
12 5 月 2020

如果一个表的几乎全部列加起来要求唯一,如果建唯一索引吗

如果一个表的几乎全部列加起来要求唯一,如果建唯一索引吗

資深大佬 : hackingwu 2

如果一个表的几乎全部列(除了一些创建时间,更新时间,创建人,更新人)加起来要求唯一,如果建唯一索引吗?因为每次查询也相当于全表扫描,但是又要求唯一限制。但是他的遍历 IO 是顺序的,而且几乎我要查询的列都在索引中(覆盖索引)我觉得肯定是比全表扫描快的。但是是否有必要再建个索引,或者有什么更好的做法吗?

大佬有話說 (17)

  • 資深大佬 : reus

    机翻语文,看不懂

  • 資深大佬 : n0tyet

    如果仅仅是为了要求唯一。。。
    为什么不程序全部列一起计算 hash
    这样只需要处理一个列

  • 資深大佬 : pmispig

    写个函数计算这几个列字符串拼接的 md5 值,以后就直接看 md5 值就可以了

  • 資深大佬 : whileFalse

    ls 说的 hash 是一个办法,不过更新就挺麻烦的。

  • 資深大佬 : sadfQED2

    由业务代码保证唯一,或者像上面老哥说的所有列拼起来计算 md5

  • 資深大佬 : blackboom

    @n0tyet Hash 还是会有冲突的

  • 資深大佬 : abcbuzhiming

    说 hash 的没考虑过数据量稍微上来一点就是会撞的这个问题吗?

  • 資深大佬 : reus

    @blackboom
    @abcbuzhiming sha256 你撞一个,那可是世界级新闻

  • 資深大佬 : Mithril

    @reus Hash 包括 SHA 都是保证你难以人为做出碰撞。而不是说自然情况下不会产生碰撞。

  • 資深大佬 : Muninn

    可能是我运气好吧 我用了很多年 还没撞过 笑

  • 資深大佬 : Mithril

    你可以直接用 MD5,或者其他更简单的摘要算法对你全列加和做个 hash,然后对保存这个数值的列做聚类索引。
    检索的时候把这个列作为优先条件,然后再查你的条件。这样保证可以快速过滤数据,又可以保证碰撞不会影响最终结果。

  • 資深大佬 : xupefei

    用一个列做索引,然后字符串拼贴后做 bloom filter 。
    插入数据时,如果在 bloom filter 里发现冲突,就用索引去一个一个检查冲突项。

  • 資深大佬 : reus

    @Mithril bitcoin 就是用 sha256,现在全世界不知道多少算力用在算 sha256 上,一个已知的碰撞都没有出现过。

  • 資深大佬 : Hstar

    这个思路就是表中单独一列存摘要,摘要可以纯拼接字符串或者用摘要算法算一个,如果存在有几列的数据可能会很长那么只能用摘要算法。
    数据里不大的情况下不需要关心摘要碰撞,如果有强唯一需求,可以用碰撞概率更低的摘要算法或者业务逻辑上先检查摘要一致再逐列检查是否一致。

  • 資深大佬 : reus

    @Mithril 就算是更弱的 sha1,也从来没有在你说的“自然情况下”出现过碰撞。直到 2017 年才出现人为构造的碰撞,和你的理解恰恰相反: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

  • 資深大佬 : RuiQ

    哈希索引

  • 資深大佬 : fzhyzamt

    用 crc32 作账号唯一键 id 几年没撞过

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具