我想在我的MysqL表中使TEXT字段的值唯一.
经过小规模的研究后,我发现由于性能问题,每个人都不鼓励在TEXT字段上使用UNIQUE INDEX.我现在想要使用的是:
1)创建另一个字段以包含TEXT值的哈希值(md5(text_value))
2)使这个哈希字段为UNIQUE索引
3)在查询中使用INSERT IGNORE
这个解决方案是完整,安全和最佳的吗? (在SO上找到它)
是否有更好的方法来实现这一目标?
解决方法
正如我在评论中被问到如何解决这个问题,我会把它作为回应写出来.
处于这种情况表明应用程序设计存在错误.考虑这意味着什么.
您有一个文本,您无法提前指定长度,并且可能非常长(最多64k),您希望保持唯一性.想象一下,将如此大量的数据拆分为单独的密钥,并组成复合索引以生成唯一性.这就是你要做的.对于整数,这将是16000个整数的索引,以复合索引连接.
进一步考虑CHARACTER类型字段(CHAR,VARCHAR,TEXT)通过编码进行解释,这进一步使问题复杂化.
我强烈建议以某种方式分割数据.这不仅可以使DBMS免于合并可变长度的字符块,而且还可以为部分数据生成复合键.也许您甚至可以为您的数据找到更好的存储解决方案.
如果您有疑问,我建议发布表格和/或数据库结构,并解释TEXT字段包含的逻辑数据,以及您认为它必须是唯一的原因.