Mysql索引过长怎么办


本文主要给大家介绍Mysql索引过长怎么办,希望可以给大家补充和更新些知识,如有其它问题需要了解的可以持续在开发云行业资讯里面关注我的更新文章的。mysql 索引过长1071-max key length is 767 byte
问题
create table: Specified key was too long; max key length is 767 bytes原因
数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引
而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异)于是utf8字符编码下,255*3 byte 超过限制解决
1 使用innodb引擎;
2 启用innodb_large_prefix选项,将约束项扩展至3072byte;
3 重新创建数据库;my.cnf配置:
default-storage-engine=INNODB
innodb_large_prefix=on一般情况下不建议使用这么长的索引,对性能有一定影响;这是网上的一遍文章的解决办法,但是我没有修改成功
下面我参考了一些其他的文章并结合自己的操作一步步去确定问题在哪。有同学问到InnoDB的索引长度问题,简单说几个tips。Sql代码 收藏代码
mysql> CREATE TABLE tb (
-> a varchar(255) DEFAULT NULL,
-> b varchar(255) DEFAULT NULL,
-> c varchar(255) DEFAULT NULL,
-> d varchar(255) DEF开发云主机域名AULT NULL,
-> e varchar(255) DEFAULT NULL,
-> KEY a (a,b,c,d,e)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes可以看到,由于每个字段占用255*3, 因此这个索引的大小是3825>3072,报错。为什么3072单列索引限制MySQL 环境配置:
Server version: 5.6.28-log MySQL Community Server (GPL)Server characterset: utf8mb4
Db characterset: utf8mb4解决办法:(1)查看相关配置并作出如下设置innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_per_table = ON(2)修改建表语句,加入 row_format=DYNAMICcreate table piratebay(
SYS_ID int ,
FILE_NAME VARCHAR(200),
FILE_ID VARCHAR(30),
NUM1 VARCHAR(30),
NUM2 VARCHAR(30),
MAGNET_LINK VARCHAR(500),
PRIMARY KEY (sys_id),
KEY piratebay_n1 (FILE_NAME))
engine=innodb row_format=dynamic;原因:下面是我做的过程图:
可以看到row_formatl类型,下面修改类型
CREATE TABLE test2 ( id int(11) NOT NULL AUTO_INCREMENT, date varchar(25) DEFAULT NULL, sess_id varchar(255) DEFAULT NULL, keyword varchar(25) NOT NULL, url_n varchar(3) DEFAULT NULL, s_n varchar(3) DEFAULT NULL, select_url varchar(255) DEFAULT NULL, UNIQUE KEY (id,keyword) ) ENGINE=innodb DEFAULT row_format=dynamic;看了以上关于Mysql索引过长怎么办,希望能给大家在实际运用中带来一定的帮助。本文由于篇幅有限,难免会有不足和需要补充的地方,如有需要更加专业的解答,可在官网联系我们的24小时售前售后,随时帮您解答问题的。

相关推荐: mysql 5.5参数–innodb_read(write)_io_threads

### 5.1# innodb_file_io_threads# The number of file I/O threads in InnoDB. # Normally, this should be left at the default value of…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 06/07 17:06
Next 06/07 17:07

相关推荐