在MySQL中,如何判断表的索引是否聚集?
我们可以使用show index from table-name
来获取有关表索引的信息。但是我发现它不能显示每个索引是群集的还是非群集的。
这是为了If a table in MySQL has any index, must the table have a clustered index?
答案 0 :(得分:0)
在默认存储引擎InnoDB中,PRIMARY KEY索引始终是聚集索引。
如果您没有PRIMARY KEY,则它是非空列上的第一个UNIQUE KEY索引。
如果在非空列上没有PRIMARY KEY或UNIQUE KEY,则InnoDB具有隐藏的聚集索引。在这种情况下,您无法使用此聚集索引进行查询。
请参见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不支持聚集索引。