在性能/实现方面,mysql中唯一索引和非唯一索引之间的区别

时间:2014-08-06 21:43:40

标签: mysql database

我有一个简单的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树,因此我的猜测是性能应该相似。

谢谢。

1 个答案:

答案 0 :(得分:4)

使用unique约束,可以优化查询计划以在第一次匹配时停止。因此,拥有唯一索引可能会更快。

如果您对statement-column上的相等查询感兴趣,那么我建议在该列上使用Hash-Index并删除自己的哈希列。

在任何情况下,当列只是为了提高性能时,我不会使用某些唯一约束,因为它只是错误的。此外,我很好奇你的sql_statements表的用途。