`

MySQL索引的索引长度问题

阅读更多


http://blog.haohtml.com/archives/4595

MySQL索引的索引长度问题

in mysql

MySQL的每个单表中所创建的索引长度是有限制的,且对不同存储引擎下的表有不同的限制。查看索引可以使用show index from tbl_name命令,语法见:http://blog.haohtml.com/index.php/archives/1889
在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索引背后的数据结构及算法原理 #### 数据结构及算法基础 索引在数据库中的作用至关重要,它能够显著提高数据检索的速度。正如标题所提到的,“MySQL索引背后的数据结构及算法原理”这一主题是技术面试中...

    查看mySQL数据库索引

    #### 二、查看MySQL索引的方法 在MySQL中,可以通过多种方式来查看数据库中的索引信息。其中一种常用的方法是利用`INFORMATION_SCHEMA.STATISTICS`表来获取相关信息。具体的SQL语句如下: ```sql SELECT * FROM ...

    MySQL数据库:创建索引.pptx

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

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

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

    MySQL索引长度限制原理解析

    MySQL索引长度限制是数据库设计中的一个重要因素,它直接影响到数据检索的速度和存储空间的效率。在MySQL中,不同的存储引擎对索引长度有不同的限制,这主要是由它们的内部实现和设计目标决定的。 首先,InnoDB引擎...

    mysql 索引失效详解

    索引长度的计算公式为:`(Character Set:utf8mb4=4,utf8=3,gbk=2,latin1=1) * 列长度 + 1(允许null) + 2(变长列)`。 索引失效 ---------- 索引失效是指 MySQL 不能使用索引来加速查询,导致查询效率下降。索引...

    关于InnoDB的索引大小

    此外,InnoDB对索引长度有限制:对于主键,总长度不能超过767字节;对于辅助索引,总长度不能超过3072字节。 在设计索引时,应考虑以下几点: 1. 避免过大的索引:减少不必要的列或缩短列的长度可以减小索引大小。 ...

    mysql实验报告+-+索引的创建与管理

    MySQL中的索引是一种数据库结构,用于加速数据查询速度。索引可以类比为书籍的目录,使得数据库系统能更快地定位到所需的数据行。在实验报告中,我们主要涉及了索引的创建、管理和维护,以及对不同类型的索引的操作...

    MySQL-数据库-索引详解

    MySQL 数据库索引详解 MySQL 数据库索引是一种特殊的数据库结构,可以快速查询数据库表中特定记录。索引是提高数据库性能的重要方式。...注意添加索引的长度必须小于建表时给字段定义的长度,也可以不给长度。

    Mysql中varchar长度设置方法

    `CHAR(M)`定义的列长度固定,它会在右侧填充空格以达到指定长度,检索时不删除这些空格,这在存储定长数据时较为高效,且其上的索引效率较高。然而,`CHAR`会浪费空间,因为即使存储的字符串比定义的长度短,也会...

    mysql索引笔记1

    - **创建索引**:CREATE INDEX 或 ALTER TABLE 命令,可以指定索引是否唯一以及列的长度。 - **删除索引**:DROP INDEX命令。 - **查看索引**:SHOW INDEX FROM命令。 在何时建立索引的问题上,应考虑以下因素: - ...

    mysql索引优化深入1

    MySQL索引优化是数据库性能提升的关键之一。在深入理解索引优化的过程中,我们需要关注几个核心概念,如索引类型、键长度(key_len)、参考值(ref)以及全表扫描(type=ALL)和文件排序(Using filesort)。 首先...

    072401MySQL索引2

    其中,`index_name`是索引的名称,`table_name`是表名,`column_name`是字段名,`length`可选,用于限制索引的长度。`USING`关键字指定索引类型,默认为BTREE。`COMMENT`可以添加对索引的描述。此外,可以使用`ALTER...

    快速了解MySQL 索引

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

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

    - **索引长度**:过长的字段作为索引会导致索引占用过多空间,降低效率。 - **主键选择**:通常推荐使用自增整数作为主键,因为这样可以保持索引的紧凑性,利于查询。 - **索引选择性**:索引的选择性越高,查询效率...

    mysql 索引详细介绍

    - 索引列长度有限制,InnoDB中索引列最大200个字符。 - 选择性高且经常被查询的列优先考虑作为索引。 - 联合索引中,选择性高的列放在前面,小的列也优先,以提高查询效率。 **建立索引策略:** - 根据业务需求和...

Global site tag (gtag.js) - Google Analytics