在MySQL中,我们如何判断表的索引是否是聚集索引?
我们可以用show index from table-name
获取有关表索引的信息。但我没有发现它显示每个索引是聚集的还是非聚集的。
这样做的目的是MySQL中如果一个表有索引,那么该表就必须有聚集索引吗?
在默认存储引擎InnoDB中,主键索引始终是聚集索引。
如果您没有 PRIMARY KEY,则它是非空列上的第一个 UNIQUE KEY 索引。
如果非空列上没有 PRIMARY KEY 或 UNIQUE KEY,则 InnoDB 有隐藏的聚集索引。在这种情况下,您无法使用此聚集索引进行查询。
See https://dev.mysql.com/doc/refman/8.0/en/innodb-index-types.html
如果表没有 PRIMARY KEY 或合适的 UNIQUE 索引,InnoDB 会在包含行 ID 值的合成列上内部生成一个名为 GEN_CLUST_INDEX 的隐藏聚集索引。这些行按照 InnoDB 分配给此类表中的行的 ID 进行排序。行 ID 是一个 6 字节字段,随着新行的插入而单调增加。因此,按行 ID 排序的行实际上是按插入顺序排列的。
MyISAM 是另一种常见的存储引擎。 MyISAM 不支持聚集索引。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)