我有一个简单的INNODB mysql表sql_statements
id, text, sha1
id - primary key
text - variable length strings.
sha1 - SHA1 hash of the text
text列包含类似sql查询文本的字符串,如" select * from abc"," insert into ...",...
我在sha1列上有一个唯一索引,可以快速搜索带有给定文本的sql_statements。
但是,设计的一个限制是我们不能插入具有相同sha1散列的2行。
为了解决这个问题,我正在考虑使索引非唯一。
在性能方面,mysql中唯一索引和非唯一索引之间有什么区别?两者都被实现为B树,因此我的猜测是性能应该相似。
谢谢。
答案 0 :(得分:4)
使用unique
约束,可以优化查询计划以在第一次匹配时停止。因此,拥有唯一索引可能会更快。
如果您对statement-column上的相等查询感兴趣,那么我建议在该列上使用Hash-Index并删除自己的哈希列。
在任何情况下,当列只是为了提高性能时,我不会使用某些唯一约束,因为它只是错误的。此外,我很好奇你的sql_statements
表的用途。