在MySQL中,我们如何判断table的索引是否聚集?
In MySQL, how can we tell if an index of a table is clustered or not?
在MySQL中,我们如何判断table的索引是否聚集?
我们可以使用 show index from table-name
获取有关 table 的索引的信息。但是我没发现它显示每个索引是聚簇的还是非聚簇的。
这是为了 If a table in MySQL has any index, must the table have a clustered index?
在默认的存储引擎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
If the table has no PRIMARY KEY or suitable UNIQUE index, InnoDB internally generates a hidden clustered index named GEN_CLUST_INDEX on a synthetic column containing row ID values. The rows are ordered by the ID that InnoDB assigns to the rows in such a table. The row ID is a 6-byte field that increases monotonically as new rows are inserted. Thus, the rows ordered by the row ID are physically in insertion order.
MyISAM 是另一个常见的存储引擎。 MyISAM 不支持聚集索引。
在MySQL中,我们如何判断table的索引是否聚集?
我们可以使用 show index from table-name
获取有关 table 的索引的信息。但是我没发现它显示每个索引是聚簇的还是非聚簇的。
这是为了 If a table in MySQL has any index, must the table have a clustered index?
在默认的存储引擎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
If the table has no PRIMARY KEY or suitable UNIQUE index, InnoDB internally generates a hidden clustered index named GEN_CLUST_INDEX on a synthetic column containing row ID values. The rows are ordered by the ID that InnoDB assigns to the rows in such a table. The row ID is a 6-byte field that increases monotonically as new rows are inserted. Thus, the rows ordered by the row ID are physically in insertion order.
MyISAM 是另一个常见的存储引擎。 MyISAM 不支持聚集索引。