`

mysql索引长度问题

阅读更多

link : http://www.bsdlover.cn/html/99/n-6099.html

 

MySQL 的每个单表中所创建的索引 长度 是有限制的,且对不同存储引擎下的表有不同的限制。
在MyISAM表中,创建组合索引时,创建的索引长度不能超过1000,注意这里索引的长度的计算是根据表字段设定的长度来标量的,例如:
create table test(id int,name1 varchar(300),name2 varchar(300),name3 varchar(500))charset=latin1 engine=myisam;
create index test_name on test(name1,name2,name3);
此时报错:Specified key was too long;max key length is 1000 bytes.

修改表结构:alter table test convert to charset utf8;
create index test_name3 on test(name3).
此时warning:Specified key was too long;max key length is 1000 bytes.但是索引创建成功,查看表结构可以看到创建的索引是一个前缀索引:‘key test_name3(name3(333))’

得出的结论是:对于myisam表,如果创建组合索引,所创建的索引长度和不能超过1000 bytes,否则会报错,创建失败;对于myisam的单列索引,最大长度也不能超过1000,否则会报警,但是创建成功,最终创建的是前缀索引(取前333个字节)。

在Innodb表中,创建组合索引:
create table test1(id int,name1 varchar(300),name2 varchar(300),name3 varchar(500))charset=latin1 engine=innodb;
create index test1_name on test(name1,name2,name3);
此时给出warning:Specified key was too long;max key length is 767 bytes.

修改表结构:alter table test1 convert to charset utf8;
create index test1_name3 on test(name3).
此时给出warning:Specified key was too long;max key length is 767 bytes.

得 出的结论是:对于创建innodb的组合索引,如果各个列中的长度不超过767,则不再计算所有列的总长度,如果有超过767的,则给出报警,索引最后创 建成功,但是对于超过767字节的列取前缀索引;对于innodb的单列索引,超过767的,给出warning,最终索引创建成功,取前缀索引(取前 255字节)。

分享到:
评论

相关推荐

    mysql索引长度计算规则

    mysql索引长度计算规则

    MySQL索引长度限制原理解析

    这篇文章主要介绍了MySQL索引长度限制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 索引 TextField是不支持建立索引的 MySQL对索引字段长度有限制 ...

    MySQL数据库:创建索引.pptx

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

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

    MySQL中索引的类型 一般可分为四类: 普通索引:最普通的索引 唯一索引:索引列的值必须唯一,但允许有空值 主键索引:一种特殊的唯一索引,不允许有空值 联合索引:索引列有多个字段,使用时需要满足最左前缀...

    快速了解MySQL 索引

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。 索引分...

    Mysql建表与索引使用规范详解

    四、 MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比。五、 MySQL使用时,一条SQL语句只能使用一个表的一个索引。所有的字段...

    Mysql索引详细介绍

    Mysql索引概述 所有MySQL列类型可以被索引。对相关列使用索引是提高SELECT操作性能的最佳途径。根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。...

    MySQL索引的创建与使用

    本文来自于csdn,本文主要通过示例介绍MySQL中的单列索引、组合索引的创建与使用,希望对您的学习有所帮助。索引有很多,且按不同的分类方式,又有很多种分类。不同的数据库,对索引的支持情况也不尽相同。索引的...

    mysql建立高效的索引实例分析

    索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多). 区分度高,长度小 问题:如果让区分度高,而长度小? 答:可以针对列中的值,从左往右截取部分,来建索引 (1)截的越短, 重复度越...

    mysql数据库中的索引

     1.2 每种存储引擎对每个表至少支持16个索引,总索引长度至少为256字节;  1.3 MyISAM和InnoDB默认都是BTREE索引;  1.4 MySQL不支持函数索引,支持前缀索引【对索引字段的钱N个字符创建索引(MyISAM N=1000B...

    MySQL利用索引优化ORDER BY排序语句的方法

    create [unique|fulltext|spatial] index 索引名 on 表名(字段名 [长度] [asc|desc]); MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 通过索引优化来实现MySQL的ORDER BY语句优化: 1、...

    深入浅出Mysql优化性能提升.txt

    14-伪哈希函数降低索引长度.wmv 15-大数据量分页优化.wmv 16-索引与排序.wmv 17-冗余索引与重复索引.wmv 18-索引碎片修复.wmv 19-Explain分析SQL效果.wmv 20-In型子查询陷阱.wmv 21-Exists一定比子查询慢吗.wmv 22-...

    mysql函数大全,mysql

    它接受一个数字列表(N0, N1, N2...),将N0与剩下的所有数字比较,返回大于N0的最小数字所处的位置索引。数字N1, N2...必须按升序排列 STRCMP STRCMP()函数是MySQL里比较字符串的最简单方式之一。这个函数接受两个...

    Mysql 报Row size too large 65535 的原因及解决方法

    大意是数据表中有一个设定长度为64K的字段索引,当表中字段(不知道是字段名字还是什么)不能超过这个长度,65,535所说明的是针对的是整个表的非大字段类型的字段的bytes总合。(网上查到的) 我自己的理解(也不是...

    Mysql varchar大小长度问题介绍

    1、限制规则 字段的限制在字段定义的时候有以下规则: a) 存储限制 varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535...

    Mysql全文搜索match against的用法

    对于大的数据库,将数据装载到一...建立全文检索先期配置由于Mysql的默认配置是索引的词的长度是4,所以要支持中文单字的话,首先更改这个.*Unix用户要修改my.cnf,一般此文件在/etc/my.cnf,如果没有找到,先查找一下find /

    mysql的count()函数如何选择索引,千万级表的count()查询优化实例

    文章目录一、前言1、网上的主要两种说法2、不贴出mysql版本的测试都是耍流氓~3、mysql的count(*)和count(1)二、测试索引长度和索引基数对count(*)查询的影响1、总数据量1100W+ 表的速度2、默认使用的索引3、查看该表...

    MySQL索引操作命令小结

    创建索引 创建索引的语法是: CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON tbl_name (index_col_...BLOB和TEXT列也可以编制索引,但是必须给出前缀长度。 此处展示的语句用于创建一

    mysql数据库my.cnf配置文件

    如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。 # 如果不能,可以尝试增加sort_buffer_size变量的大小 join_buffer_size = 8388608 # 联合查询操作所能使用的缓冲区大小,和sort...

Global site tag (gtag.js) - Google Analytics