【问题标题】:MySql unique index vs. index speedMySql 唯一索引 vs. 索引速度
【发布时间】:2015-03-26 07:08:45
【问题描述】:

在 Mysql 中,除数据完整性之外 - 与常规索引相比,使用唯一索引是否有任何性能优势? (假设数据是唯一的)

即- 创作时间会更短吗?更新?还是在常规索引上查询唯一索引?

【问题讨论】:

标签: mysql performance indexing


【解决方案1】:

对于某些查询,查询优化器可以比使用普通索引更有效地使用唯一索引。仅举一个例子,在一个包含唯一索引的所有列的SELECT DISTINCT 查询中,查询优化器可以发出一个跳过对结果进行排序并消除重复项的计划——即使该计划没有明确使用索引!

不过,一般而言,唯一索引与非唯一索引对同一列的性能影响取决于您的查询。

我的建议是尽可能准确地为您的数据建模。如果您的数据的一个特征是某个列组合不会在不同的行中重复,并且您打算为这些列建立索引,那么该索引应该是唯一索引。

确实,在这种情况下,您应该考虑使用唯一索引来强制这些列的唯一性,即使您不打算为它们编制索引。添加索引确实会为插入、删除和某些更新增加一些开销,但除非您对这些操作的性能不满意,否则最好忽略它。

【讨论】:

  • 所以对于唯一索引,它强制列中的每个值对于每一行都是唯一的??
  • 是的,@Anthony,这就是“唯一索引”的“唯一”部分的含义。而“索引”部分意味着数据库维护了额外的信息,以帮助它快速将索引列的值与其对应的行关联起来。
  • @Anthony,当索引可以支持您的WHERE 条件和/或连接谓词时,它们通常是最有效的。尽管有时索引可以通过覆盖所有被选择的列来提供一些优势,但这并不是选择要定义的索引的好策略。请记住,通常,查询中的每个表最多使用一个索引。另请记住,许多因素会影响查询性能,因此您需要进行测试,有时还需要进行调整。
  • 这是一个写得很好的回应,但“它取决于”是一个非常弱的答案。
  • @Qubei 除非你生活在一块岩石下——“这取决于”是任何好的答案中最真实的一点。因为一切都是相对的,所以正确的解决方案总是取决于每个人特定问题的具体情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多