【发布时间】:2013-02-24 01:16:11
【问题描述】:
我想让 TEXT 字段的值在我的 MySQL 表中唯一。
经过小型研究,我发现由于性能问题,每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX。我现在要使用的是:
1) 创建另一个字段以包含 TEXT 值的哈希 (md5(text_value))
2) 将此哈希字段设为唯一索引
3) 在查询中使用 INSERT IGNORE
此解决方案是否完整、安全且最佳? (在 SO 上找到)
有没有更好的方法来实现这个目标?
【问题讨论】:
-
使用
VARCHAR(32)或CHAR(32)查看其他主题:stackoverflow.com/questions/247304/… 您可以将此字段设置为 UNIQUE 以及任何您不想要的字段。 -
对于触发器来说似乎是一项不错的任务。见dev.mysql.com/doc/refman/5.0/en/create-trigger.html
-
如果您按照上面的建议进行操作,那么您只需手动执行 MySQL 在使用 HASH 创建唯一索引时会执行的操作。而且很可能不会那么快。
-
@0xCAFEBABE 感谢您的指出。您还有其他想法如何解决这个问题吗?
-
请记住,两个仅在尾随空格数上有所不同的 TEXT 字段通常是唯一哈希,但 TEXT 字段本身的唯一索引会引发重复键错误。
标签: mysql database performance indexing unique