0

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

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

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

4

2 回答 2

2

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

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

或者

显示索引语句。

于 2012-06-15T05:48:59.680 回答
0

你没有指定表引擎,所以我假设 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。”

于 2012-06-14T22:12:04.143 回答