【问题标题】:Difference between unique and non-unique index in mysql in terms of performance/implementationmysql中唯一索引和非唯一索引在性能/实现方面的区别
【发布时间】:2014-09-30 00:00:23
【问题描述】:

我有一个简单的 INNODB mysql 表 sql_statements

id, text, sha1

id   - primary key
text - variable length strings.           
sha1 - SHA1 hash of the text

文本列包含类似 sql 查询文本的字符串,例如“select * from abc”、“insert into ...”、...

我在 sha1 列上有一个唯一索引,可以快速搜索带有给定文本的 sql_statements。

但是,设计的一个限制是我们不能插入具有相同 sha1 哈希的 2 行。

为了解决这个问题,我正在考虑使索引不唯一。

mysql中唯一索引和非唯一索引在性能方面有什么区别?两者都是作为 B 树实现的,所以我的猜测是性能应该相似。

谢谢。

【问题讨论】:

  • 这张表的用途还不清楚。您回答了存储的内容,但没有回答存储它的原因。恐怕是为了一些奇怪的性能“优化”。

标签: mysql database


【解决方案1】:

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

如果您对语句列上的相等查询感兴趣,那么我建议在该列上使用哈希索引并删除您自己的哈希列。

在任何情况下,当列不唯一时,我都不会使用一些唯一约束来提高性能,因为这完全是错误的。此外,我很好奇您的sql_statements 表是用来做什么的。

【讨论】:

  • 我更新了问题以说明表格的用途。
  • 我建议删除哈希列并在语句列上使用非唯一索引。快速查询是 DBMS 的工作。
猜你喜欢
  • 2010-09-28
  • 1970-01-01
  • 2023-03-11
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多