返回顶部
首页 > 资讯 > 数据库 >mysql索引过长以及专用密匙太长的解决方法
  • 495
分享到

mysql索引过长以及专用密匙太长的解决方法

2023-06-25 13:06:53 495人浏览 独家记忆
摘要

今天就跟大家聊聊有关mysql索引过长以及专用密匙太长的解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在创建要给表的时候遇到一个有意思的问题,提示Specified key

今天就跟大家聊聊有关mysql索引过长以及专用密匙太长的解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

在创建要给表的时候遇到一个有意思的问题,提示Specified key was too long; max key length is 767 bytes,从描述上来看,是Key太长,超过了指定的 767字节限制

下面是产生问题的表结构

CREATE TABLE `test_table` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(1000) NOT NULL DEFAULT '',  `link` varchar(1000) NOT NULL DEFAULT '',  PRIMARY KEY (`id`),  KEY `name` (`name`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

我们可以看到,对于name,我们设置长度为1000可变字符,因为采用utf8mb4编码, 所以它的大小就变成了 1000 * 4 > 767
所以再不修改其他配置的前提下,varchar的长度大小应该是 767 / 4 = 191

有兴趣的同学可以测试下,分别指定name大小为191, 192时,是不是前面的可以创建表成功,后面的创建表失败,并提示错误Specified key was too long; max key length is 767 bytes

解决办法一

  • 使用innodb引擎

  • 启用innodb_large_prefix选项,修改约束扩展至3072字节

  • 重新创建数据库

my.cnf配置

set global innodb_large_prefix=on;set global innodb_file_per_table=on;set global innodb_file_fORMat=BARRACUDA;set global innodb_file_format_max=BARRACUDA;

上面这个3072字节的得出原因如下

我们知道InnoDB一个page的默认大小是16k。由于是Btree组织,要求叶子节点上一个page至少要包含两条记录(否则就退化链表了)。
所以一个记录最多不能超过8k。又由于InnoDB的聚簇索引结构,一个二级索引要包含主键索引,因此每个单个索引不能超过4k (极端情况,pk和某个二级索引都达到这个限制)。
由于需要预留和辅助空间,扣掉后不能超过3500,取个“整数”就是(1024*3)。

解决办法二

在创建表的时候,加上 row_format=DYNAMIC

CREATE TABLE `test_table` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(255) NOT NULL DEFAULT '',  `link` varchar(255) NOT NULL DEFAULT '',  PRIMARY KEY (`id`),  KEY `name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 row_format=DYNAMIC;

这个参数的作用如下

Mysql 索引只支持767个字节,utf8mb4 每个字符占用4个字节,所以索引最大长度只能为191个字符,即varchar(191),若想要使用更大的字段,mysql需要设置成支持数据压缩,并且修改表属性 row_format ={DYNAMIC|COMPRESSED}

看完上述内容,你们对mysql索引过长以及专用密匙太长的解决方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: mysql索引过长以及专用密匙太长的解决方法

本文链接: https://lsjlt.com/news/305084.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql索引过长以及专用密匙太长的解决方法
    今天就跟大家聊聊有关mysql索引过长以及专用密匙太长的解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在创建要给表的时候遇到一个有意思的问题,提示Specified key ...
    99+
    2023-06-25
  • mysql索引过长Specialed key was too long的解决方法
    目录解决办法一解决办法二在创建要给表的时候遇到一个有意思的问题,提示Specified key was too long; max key length is 767 bytes,从...
    99+
    2024-04-02
  • MySQL选错索引的原因以及解决方案
    MySQL 中,可以为某张表指定多个索引,但在语句具体执行时,选用哪个索引是由 MySQL 中执行器确定的。那么执行器选择索引的原则是什么,以及会不会出现选错索引的情况呢? 先看这样一个例子: 创建表 Y,设置两个普...
    99+
    2022-05-19
    MySQL 索引 MySQL 选错索引 MySQL 选错索引解决
  • java: 常量字符串过长 报错的解决方法及原因
    文章目录 1.发生问题的场景2.解决问题3.问题的原因4.参考 1.发生问题的场景 我在用java获取一个接口的大JSON字符串,并赋值给String常量时,遇到了java: 常量字符...
    99+
    2023-10-08
    java jvm 开发语言
  • mysql索引的优劣势是什么以及使用方法
    本篇内容主要讲解“mysql索引的优劣势是什么以及使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql索引的优劣势是什么以及使用方法”吧!一、索引的优劣势优点:可以快速的检索&nbs...
    99+
    2023-06-08
  • PHP与MySQL索引的常见问题及解决方法
    引言:在使用PHP开发网站应用程序时,经常会涉及到与数据库的交互操作,而MySQL作为开发者最常用的数据库之一,索引的优化对于提高查询效率起着至关重要的作用。本文将介绍PHP与MySQL索引的常见问题,并给出相应的解决方法,同时提供具体的代...
    99+
    2023-10-21
  • sql索引失效的情况以及超详细解决方法
    目录前言数据准备 1.查询条件中有or,即使有部分条件带索引也会失效2.like查询是以%开头3.如果列类型是字符串,那在查询条件中需要将数据用引号引用起来,否则不走索引4.索引列上参与计算会导致索引失效5.违...
    99+
    2024-04-02
  • MySQL索引失效的原因及解决方法是什么
    MySQL索引失效的原因可能有以下几种:1. 数据分布不均匀:如果某个列的数据分布不均匀,索引可能无法有效地过滤掉大部分的数据,导致...
    99+
    2023-10-25
    MySQL
  • mysql索引失效的原因及解决方法有哪些
    MySQL索引失效的原因及解决方法有以下几个方面:1. 索引选择不当:MySQL根据查询的条件和数据分布情况来选择使用哪个索引。如果查询的条件与索引不匹配或者数据分布不均匀,就会导致索引失效。解决方法是优化查询语句,使用合适的索引。2....
    99+
    2023-08-09
    mysql
  • 如何解决Mysql数据库报ERROR 1045 28000报错以及MySQL忘记密码的找回方法
    这期内容当中小编将会给大家带来有关如何解决Mysql数据库报ERROR 1045 28000报错以及MySQL忘记密码的找回方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收...
    99+
    2024-04-02
  • chatGPT使用及注册过程中常见的一些错误解决方法(所以报错汇总)
    目录前言一、在注册或者使用chatGPT之前要做的准备工作。二、chatGPT注册过程及使用过程中报错解决方法。1、Access denied,报错1020   ...
    99+
    2023-02-08
    chatGPT注册报错 chatGPT使用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作