`
darrenzhu
  • 浏览: 782384 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

创建前缀索引报长度超出错误

阅读更多
表结构定义如下:
CREATE TABLE `sku` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键' ,
`sku_code` VARCHAR(20) NOT NULL COMMENT '商品编码' ,
`version` BIGINT UNSIGNED NOT NULL COMMENT '商品信息版本,初始值1,每修改一次版本值增加1' ,
`sku_name` VARCHAR(200) NOT NULL COMMENT '商品名称' ,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_idx_sku_code_version` (`sku_code`,`version`) USING BTREE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci;

执行
create index idx_sku_name on msm_sku(sku_name);然后发现报如下错误

Error: Specified key was too long; max key length is 767 bytes
SQLState:  42000
ErrorCode: 1071

2个问题?
1)为什么报too long 错误?
2)为什么 max key length is 767 bytes,767怎么来的?


回答:
1)报too long的错误,是因为utm8mb4编码格式下,一个汉字占4个字节,由于定义的是varchar(200),所以最大字节数=200*4 = 800 > 767,所以报too long 错误

2)why 767?
这就是mysql在某个引擎某个编码下对索引长度有最大限制。参见
mysql 索引长度限制详解
https://blog.csdn.net/guyan0319/article/details/79715761

解决方案:
建立前缀索引,即建索引时指定字符长度
create index idx_sku_name on sku(sku_name(50));
或者
ALTER TABLE `sku`
ADD INDEX idx_sku_name (sku_name(50));

分享到:
评论

相关推荐

    MySQL数据库:创建索引.pptx

    创建索引 数据索引 课程目标 理解 —— 创建索引的语法;...长度:表示使用列的前多少个字符创建索引。使用列的一部分创建索引可以使索引文件大大减小,从而节省磁盘空间。BLOB或TEXT列必须用前缀索引。 创建索引

    国外IC前缀索引.pdf

    国外IC前缀索引.上百家国外公司器件前缀总结

    通过实例认识MySQL中前缀索引的用法

    主要通过实例来介绍MySQL中的前缀索引,包括前缀在实际使用中需要考虑到的长度问题等,需要的朋友可以参考下

    bjmashibing#InternetArchitect#前缀索引实例说明1

    --此时前缀的选择性接近于完整列的选择性--还可以通过另外一种方式来计算完整列的选择性,可以看到当前缀长度到达7之后,再增加前缀长度,选择性提升的幅度已经很小了

    MySQL前缀索引导致的慢查询分析总结

    前端时间跟一个DB相关的项目,alanc反馈有一个查询,使用索引比不使用索引慢很多倍,有点毁三观。所以跟进了一下,用explain,看了看2个查询不同的结果。 不用索引的查询的时候结果如下,实际查询中速度比较块。 ...

    mysql索引与视图的实例附答案.docx

    mysql索引与视图的实例附答案.docx

    深入oracle分区索引的详解

    表可以按range、hash、list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结。局部索引local index1.局部...

    MySQL组合索引与最左匹配原则详解

    之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏了些东西,这里自己整理一下这方面的内容。 什么时候创建组合索引? 当我们的where查询存在多个...

    JAVA面试题MySQL索引原理及索引优化校招面试找工作笔试

    JAVA面试题MySQL索引原理及索引优化校招面试找工作笔试 目录: 基本概念 ...索引选择性,行数前缀索引 所谓索引的选择性是指不重复的索引值与表记录数的比值 索引优化 最左前缀原则 Hash索引 介绍、特点。

    MySQL索引不会被用到的情况汇总

    联合索引:索引列有多个字段,使用时需要满足最左前缀原则 普通索引 这是最基本的索引,它没有任何限制。它有以下几种创建方式: 1.创建索引 代码如下: CREATE INDEX indexName ON mytable(username(length)); ...

    关于MySQL面试题中有关索引的九大难点全在这里了

    数据结构维度 oB+树索引:所有数据存储在...o联合索引:多个字段创建的索引,使用时遵循最左前缀原则。 o唯一索引:索引列中的值必须是唯一的,但是允许为空值。 空间索引:MySQL5.7之后支持空间索引,在空间索引这方面

    mysql数据库中的索引

     1.4 MySQL不支持函数索引,支持前缀索引【对索引字段的钱N个字符创建索引(MyISAM N=1000B,InnoDB N=767B;创建表的前缀长度是以字符为单位的,使用多字节字符集的时候需要注意】;  1.5 MyISAM支持全文本索引...

    论文研究-一种新的前缀立方索引机制 .pdf

    一种新的前缀立方索引机制,聂晶,冯剑琳,前缀立方在浓缩数据立方的基础上利用前缀共享和基本单元组技术有效地缩小了数据立方的尺寸。由于前缀共享产生的分组结构,浓缩数

    Mysql索引详细介绍

    Mysql索引概述 所有MySQL列类型可以被索引。对相关列使用索引是提高SELECT操作性能的最佳途径。根据存储引擎定义每个表...还可以创建FULLTEXT索引。该索引可以用于全文搜索。只有MyISAM存储引擎支持FULLTEXT索引,并且

    前缀列表 我自己写的说明

    关于前缀列表的说明我自己写的 请大家一起分享 比较容易理解的 不要害怕 还要我怎么详细啊 就是个前缀列表么 关于前缀列表的说明我自己写的 请大家一起分享 比较容易理解的 不要害怕 还要我怎么详细啊 就是个前缀...

    MySQL字符串索引更合理的创建规则讨论

    针对使用MySQL的索引,我们之前介绍过索引的最左前缀规则,索引覆盖,唯一索引和普通索引的使用以及优化器选择索引等概念,今天我们讨论下如何更合理的给字符串创建索引。 如何更好的创建字符串索引 我们知道,...

    mysql 索引详细介绍

    比如:在userid 和 date字段上创建联合索引。 那么如果输入 userId作为条件,那么这个userid可以使用到索引,如果直接输入 date作为条件,那么将不能使用到索引。  3.匹配列前缀查询 比如: order_sn like ‘134%’...

    IPv4地址前缀和地址数量对应表

    我们通常用前缀/XX的形式来表示IPv4地址,IPv4前缀和所表示的地址数量的对应关系介绍

    MySQL中索引与视图的用法与区别详解

    mysql支持BTREE索引、HASH索引、前缀索引、全文本索引(FULLTEXT)【只有MyISAM引擎支持,且仅限于char,varchar,text列】、空间列索引【只有MyISAM引擎支持,且索引的字段必须非空】,但不支持函数索引。 MyISAM和...

Global site tag (gtag.js) - Google Analytics