我有一个小问题:主要和次要索引之间的性能差异是什么?造成这种差异的原因是什么?
我在谷歌上搜索,我已经看到二级索引存储在另一个表中,所以这会减慢所有操作..但还有其他一些原因可以证明这种性能下降是合理的吗?
非常感谢
答案 0 :(得分:4)
群集表是没有“堆”部分的B树 - 行直接存储在群集索引(主键)的B-Tree结构中。 B-Tree的节点可以拆分或合并,因此物理位置或行可以改变,因此我们不能从二级索引到行有一个简单的“指针”,因此二级索引必须包含一个完整的副本主索引字段,以便能够可靠地识别行。
对于Oracle,MS SQL Server也是如此,并且是also true for InnoDB。
这意味着群集表中的二级索引比基于堆的表中的二级索引“更胖”,其中:
让我引用Use The Index, Luke!:“索引组织表和聚簇索引的优点主要限于不需要第二个索引的表。”
这很遗憾,因为MySQL不允许您独立于存储引擎选择群集。