【发布时间】:2018-02-09 05:48:33
【问题描述】:
即使我没有主键或唯一键,InnoDB 仍会在合成列上创建集群索引,如下所述。
https://dev.mysql.com/doc/refman/5.5/en/innodb-index-types.html
那么,为什么 InnoDB 必须要求聚集索引?这里必须存在聚集索引是否有明确的原因?
在 Oracle 数据库或 MSSQL 中,我认为他们不需要这个。 另外,我认为集群索引与普通表相比也没有那么大的优势。
确实,使用集群键查找数据不需要额外的磁盘读取,并且比我没有集群索引但没有集群索引时更快,二级索引可以通过使用物理rowID查找更快。 因此,我认为没有任何理由坚持使用它。
【问题讨论】:
-
除了您链接的文档中的描述之外,我不确定您希望我们说什么。 Innodb 的创建者做出了设计决定。如果您不喜欢它,请使用不同的表类型或 rdbms 产品。
-
@Shadow 我只是想知道他们做出这个决定的原因。我的目的是更多地了解聚集索引,而不是选择要使用的产品。
-
There are probably plenty of optimisation decisions that can be made when there are fewer choices.确定哪些关键点与开始的第一个对话有关“如果我们假设所有表都有一个聚集索引,我们可以做......”是不太可能的。
-
@PhanHoangMinh 那么您应该询问开发人员。我们只能猜测文档中写的内容。
标签: mysql sql indexing clustered-index