【问题标题】:What does size limit on MySQL index mean?MySQL索引的大小限制是什么意思?
【发布时间】:2014-01-20 21:01:20
【问题描述】:

我有一个这样创建的表:

CREATE TABLE `my_table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`info` varchar(50) DEFAULT NULL,
`some_more_info` smallint(5) unsigned NOT NULL
PRIMARY KEY (`id`),
KEY `my_index` (`some_more_info`,`info`(24)),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

我的问题是关于名为my_index 的第二个键。 “(24)”大小限制是什么意思?列的实际大小是 50,但索引只有 24 个字符。

这是否意味着 MySQL 仅索引列 info 的前 24 个字符?

【问题讨论】:

    标签: mysql database indexing


    【解决方案1】:

    简而言之,是的,构建 BTree 索引时会考虑前 24 个字符。索引限制分配给文本类型,例如 varchar 和 text,因为它们不影响数值精度。

    【讨论】:

    • 查看MySQL docs 并查看有关“可以创建仅使用列值的前导部分的索引...”的 cmets
    【解决方案2】:

    是的。 关于索引长度的完整描述可以在这里找到: http://dev.mysql.com/doc/refman/5.0/en/create-index.html

    前缀长度以字符为单位给出,用于非二进制字符串类型和 二进制字符串类型的字节数。也就是说,索引条目包括 CHAR、VARCHAR 的每列值的第一个长度字符, 和 TEXT 列,以及每个列值的第一个长度字节 BINARY、VARBINARY 和 BLOB 列。

    另外,您创建的查询有/有一些额外的 ,'s。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2013-01-26
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 2019-02-15
      相关资源
      最近更新 更多