`

mysql中索引的索引长度问题

 
阅读更多
参考:
http://lsting.iteye.com/blog/707749
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.


我们这个测试,
drop table if exists test;
create table test(test varchar(767) primary key)charset=latin5;
-- 成功


drop table if exists test;
create table test(test varchar(768) primary key)charset=latin5;
-- 错误
-- ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

drop table if exists test;
create table test(test varchar(383) primary key)charset=GBK;
-- 成功


drop table if exists test;
create table test(test varchar(384) primary key)charset=GBK;
-- 错误
-- ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

drop table if exists test;
create table test(test varchar(255) primary key)charset=UTF8;
-- 成功


drop table if exists test;
create table test(test varchar(256) primary key)charset=UTF8;
-- 错误
-- ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes



如果你还看不错区别,那我只要明说了。
MySQL的varchar主键只支持不超过768个字节 或者 768/2=384个双字节 或者 768/3=256个三字节的字段
而 GBK是双字节的,UTF-8是三字节的。 MySQL ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 的原因分析
分享到:
评论
1 楼 wujie0723 2015-09-21  
胜多负少少时诵诗书是是是

相关推荐

    查看mySQL数据库索引

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

    mysql索引长度计算规则

    mysql索引长度计算规则

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

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

    MySQL数据库:创建索引.pptx

    索引名:索引的名称,索引名在一个表中名称必须是唯一的。 列名:表示创建索引的列名。 长度:表示使用列的前多少个字符创建索引。使用列的一部分创建索引可以使索引文件大大减小,从而节省磁盘空间。BLOB或TEXT列...

    Mysql中varchar长度设置方法

    在MySQL中,`VARCHAR`是一种用于存储可变长度字符串的数据类型,它的长度设置是非常关键的,因为它直接影响到存储空间的使用效率和数据的正确性。`VARCHAR`的长度设置方法是通过在类型名后面括号内指定最大字符数,...

    MySQL索引背后的数据结构及算法原理

    正如标题所提到的,“MySQL索引背后的数据结构及算法原理”这一主题是技术面试中的重要内容之一。本文旨在深入探讨MySQL索引的相关概念及其背后的原理。 #### 索引的本质 索引本质上是一种数据结构,其目的是帮助...

    MySQL-数据库-索引详解

    MySQL 数据库索引是一种特殊的数据库结构,可以快速查询数据库表中特定记录。索引是提高数据库性能的重要方式。 索引的概念 ---------------- 索引是表中数据的目录。如果使用索引,则扫描索引文件,根据索引项,...

    MySQL索引长度限制原理解析

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

    关于InnoDB的索引大小

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

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

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

    mysql 索引失效详解

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

    072401MySQL索引2

    MySQL中的索引是一种重要的数据结构,它极大地提高了数据库查询的速度,尤其在处理大量数据时。索引被附加在表之外,作为一个独立的数据集,用于快速定位数据行。根据描述,我们将探讨不同类型的索引、存储引擎对...

    mysql索引笔记1

    MySQL是世界上最流行的开源关系型数据库管理系统之一,其性能优化中,索引扮演着至关重要的角色。索引可以类比为图书馆的书目索引,它极大地提升了数据检索的效率,减少了数据库的IO成本,同时也降低了数据排序时CPU...

    mysql高性能索引查询(查询性能问题、索引使用原则、索引创建、索引的优点缺点).docx

    前缀索引适用于字段值较长的情况,但需要注意,索引长度的选择应基于实际查询需求来决定。 #### 三、索引查询 ##### 1、单列查询 对于单列索引,可以直接通过索引字段进行查询,从而提高查询效率。 ```sql ...

    mysql索引优化深入1

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

    mysql性能优化之索引优化

    MySQL性能优化中的索引优化是提升数据库查询效率的关键技术。索引是一种特殊的数据结构,它允许数据库快速定位和访问表中的特定数据行,类似于书籍的目录,帮助读者迅速找到所需内容。MySQL中,默认的索引类型是B+树...

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

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

    藏经阁-MySQL表和索引优化实战-11页

    MySQL 表和索引优化实战是指在 MySQL 数据库中对表和索引进行优化,以提高查询效率和存储空间利用率。本文将从 MySQL 表和索引的基本概念出发,探讨 MySQL 表和索引优化的实战经验和技巧。 一、 MySQL 表和索引的...

Global site tag (gtag.js) - Google Analytics