【问题标题】:InnoDB: Find clustered index in existing tableInnoDB:在现有表中查找聚集索引
【发布时间】:2019-06-24 01:30:29
【问题描述】:

有没有办法显式确定现有 InnoDB 表中的聚集索引。我知道文档中列出的确定聚集索引的规则,但我想知道是否有办法在现有表中显式检查它。

【问题讨论】:

    标签: mysql innodb clustered-index


    【解决方案1】:

    如您所见,InnoDB 表始终使用 PRIMARY KEY 或第一个非 NULL UNIQUE KEY 作为其聚集索引。

    如果表没有这两个,它会生成自己的聚集索引,并将其称为“GEN_CLUST_INDEX”。

    mysql> create table test.testy ( i int ); -- no eligible clustered index
    
    mysql> select t.name as table_name, i.name as index_name 
      from information_schema.innodb_sys_tables t 
      join information_schema.innodb_sys_indexes i using (table_id) 
      where i.name = 'GEN_CLUST_INDEX';
    +------------+-----------------+
    | table_name | index_name      |
    +------------+-----------------+
    | test/testy | GEN_CLUST_INDEX |
    +------------+-----------------+
    

    【讨论】:

    • 非常感谢。尽管我的机器上不存在表 innodb_sys_tables,但您为我指明了正确的方向。我查看了“information_schema.innodb_indexes”并在那里找到了 GEN_CLUST_INDEX。对于每个 innodb 表,是否有一个表包含 clustered_index 列?
    • 你用的是什么版本?从 MySQL 5.6 及更高版本开始,innodb_sys_* 表应该存在。见dev.mysql.com/doc/refman/5.6/en/innodb-i_s-tables.html
    • 我使用的是版本 8。我猜他们重命名了它们。见dev.mysql.com/doc/refman/8.0/en/innodb-i_s-tables.html
    • 是的,他们在 8.0 中做了很多破坏向后兼容性的小改动,而我还没有足够的 8.0 经验来记住它们。
    猜你喜欢
    • 2014-08-27
    • 2016-11-23
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多