【问题标题】:How can I get the primary key index prefix length from information_schema in MySQL?如何从 MySQL 中的 information_schema 获取主键索引前缀长度?
【发布时间】:2012-06-14 22:01:06
【问题描述】:

假设我有一个如下创建的表:

create table `test_table` (
  `col1` varchar(128) NOT NULL,
  PRIMARY KEY (`col1`(16))
);

现在,假设我有一个脚本正在检查架构,寻找有关主键的信息。该脚本如何在不解析show create table 的输出的情况下找到索引前缀长度(上例中为16)?此信息不在information_schema.key_column_usage 中(无论如何在 MySQL 5.1 中),但它是否在 information_schema 中的其他位置?

【问题讨论】:

    标签: mysql key information-schema


    【解决方案1】:

    尝试使用information_schema.STATISTICS 表(SUB_PART 字段)-

    SELECT
      TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, SUB_PART
    FROM
      information_schema.STATISTICS
    

    SHOW INDEX 声明。

    【讨论】:

      【解决方案2】:

      你没有指定表引擎,所以我假设是 InnoDB。对于您的问题 - 由于 InnoDB 存储索引数据的方式,不可能获得索引大小。这是您的问题报告的 MySQL 错误,请参阅页面底部的响应:http://bugs.mysql.com/bug.php?id=57192

      这是设计使然。 InnoDB 中的表数据存储在索引中 主键的结构(显式或隐式)。所以,主键是 数据并且无需将其大小报告为(二级)索引 大小。

      http://dev.mysql.com/doc/refman/5.1/en/innodb.html,例如:

      "InnoDB 将用户数据存储在聚集索引中,以减少常见的 I/O 基于主键的查询。”

      【讨论】:

      • 由于主键意味着唯一,我认为这可能不仅仅是与该值无关的 InnoDB。但是,我注意到即使对于 InnoDB,在 CREATE 语句中指定的值也由 SHOW CREATE TABLE 存储和报告。我想一个工具可能只是为了报告而报告。
      猜你喜欢
      • 1970-01-01
      • 2012-02-08
      • 2011-04-23
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2013-02-15
      相关资源
      最近更新 更多