集群或唯一索引MySql DB?

时间:2016-10-03 14:06:09

标签: mysql indexing

我有一个有趣的问题:群集索引和唯一索引之间有什么区别?什么更好,更快,为什么?

1 个答案:

答案 0 :(得分:0)

使用MySQL的InnoDB引擎,您可以获得3种普通索引:

  • PRIMARY KEY - “聚集”数据和“唯一”。 (通常AUTO_INCREMENT
  • UNIQUE - 唯一,非群集。
  • INDEX - 非唯一,非群集。

所有都是以BTrees实现的。 “集群”表示数据位于叶节点中。

考虑:

  • 3个选项中的任何一个都有助于搜索行的性能。* InnoDB需要PRIMARY KEY
  • 如果您希望数据库在您尝试插入已存在的内容时向您吐口水,则需要指定PRIMARY KEYUNIQUE的列。
  • 辅助密钥(UNIQUEINDEX)通过PRIMARY KEY查找数据。推论1:通过PK找到一行更快。推论2:庞大的(例如,VARCHAR(255))PK是每个二级密钥的额外负担。
  • “覆盖”辅助密钥不需要超出其BTree。
  • 数据和索引以16KB块为单位缓存在RAM中;缓存可能是性能的重要考虑因素。
  • 当索引无法完全缓存时,UUID / GUID索引非常糟糕 - 由于I / O较高。
  • INSERT必须立即检查PRIMARY KEY和任何UNIQUE个密钥是否重复,但它可能会延迟更新其他辅助密钥。 (此可能会影响插入期间的性能。)

根据这些细节,有时可以推断出问题的答案。

(警告:InnoDB以外的引擎有一些不同的特征。)