首页 > 数据库 > mysql教程 > 为什么我的 MySQL VARCHAR(512) 索引没有被使用?

为什么我的 MySQL VARCHAR(512) 索引没有被使用?

Susan Sarandon
发布: 2024-11-25 03:56:12
原创
430 人浏览过

Why Isn't My MySQL VARCHAR(512) Index Being Used?

MySQL VARCHAR 索引长度

MySQL 表的最大索引长度为 767 字节。这是每列的,因此复合索引总共不能超过 767 字节。但是,此规则有一些例外:

  • 启用 innodb_large_prefix 配置选项后,使用 DYNAMIC 或 COMPRESSED 行格式的 InnoDB 表的索引长度限制将提高到 3072 字节。
  • 对于utf8字符集,MySQL假设每个字符3个字节。因此,可以索引的最大字符数为 255 (767 / 3)。

在您的具体情况下:

  • 您的产品表有一个类型为 varchar(512) 的名称列。
  • 您在此列上创建了索引ALTER TABLE products ADD INDEX (name(512))。

您创建的索引未被使用,因为它超过了最大索引长度 767 字节。这是因为 MySQL 假定每个 UTF-8 字符占 3 个字节,即 512 个字符 * 3 个字节/字符 = 1536 个字节。

要解决此问题,您可以:

  • 将索引的长度减少到 255 个字符或

    ALTER TABLE products ADD INDEX (name(255));
    登录后复制
  • 启用 innodb_large_prefix 配置选项并使用 DYNAMIC 或 COMPRESSED 行格式。

    SET innodb_large_prefix = ON;
    
    ALTER TABLE products ROW_FORMAT=COMPRESSED;
    登录后复制

其他注意:

  • 如果您主要存储 ASCII 字符(每个字符 1 个字节),则可以指定最多 767 个字节的索引。
  • 可以存储使用 utf8mb4 字符集的 4 字节字符。但是,这将进一步减少可索引的最大字符数。

以上是为什么我的 MySQL VARCHAR(512) 索引没有被使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板