精华内容
下载资源
问答
  • 索引最多几个字段
    千次阅读
    2021-01-27 17:01:48

    最多16列。

    create table test (

    f1 int,

    f2 int,

    f3 int,

    f4 int,

    f5 int,

    f6 int,

    f7 int,

    f8 int,

    f9 int,

    f10 int,

    f11 int,

    f12 int,

    f13 int,

    f14 int,

    f15 int,

    f16 int,

    f17 int

    );

    create index idx_test_16 on test (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16);

    create index idx_test_17 on test (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17);

    运行结果如下:

    mysql> create table test (

    -> f1 int,

    -> f2 int,

    -> f3 int,

    -> f4 int,

    -> f5 int,

    -> f6 int,

    -> f7 int,

    -> f8 int,

    -> f9 int,

    -> f10 int,

    -> f11 int,

    -> f12 int,

    -> f13 int,

    -> f14 int,

    -> f15 int,

    -> f16 int,

    -> f17 int

    -> );

    Query OK, 0 rows affected (0.06 sec)

    mysql>

    mysql> create index idx_test_16 on test (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16);

    Query OK, 0 rows affected (0.02 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> create index idx_test_17 on test (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17);

    ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed

    mysql>

    更多相关内容
  • 一、MySql官网文档解释 在**mysql5.***中描述如下 Different limits related to tables and indexes. For example, the maximum number of ordered indexes in the ... 原文:MySQL 一张表单个索引最多支持创建16个字段

    一、MySql官网文档解释
    在**mysql5.***中描述如下

    Different limits related to tables and indexes. For example, the maximum number of ordered indexes in the cluster is determined by MaxNoOfOrderedIndexes, and the maximum number of ordered indexes per table is 16.

    **mysql8.***中描述如下

    A table can contain a maximum of 64 secondary indexes.A maximum of 16 columns is permitted for multicolumn indexes. Exceeding the limit returns an error.
    ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed

    二、测试验证

    mysql版本为mysql-5.5.61
    1、创建测试表blog_user,包含17个列

    create table blog_user
    (
      user_Name1 char(15) not null,
      user_Name2 char(15) not null,
      user_Name3 char(15) not null,
      user_Name4 char(15) not null,
      user_Name5 char(15) not null,
      user_Name6 char(15) not null,
      user_Name7 char(15) not null,
      user_Name8 char(15) not null,
      user_Name9 char(15) not null,
      user_Name10 char(15) not null,
      user_Name11 char(15) not null,
      user_Name12 char(15) not null,
      user_Name13 char(15) not null,
      user_Name14 char(15) not null,
      user_Name15 char(15) not null,
      user_Name16 char(15) not null,
      user_Name17 char(15) not null,
      primary key(user_Name1)          
    )engine=innodb default charset=utf8 auto_increment=1;
    

    执行结果如下(正常执行):

    在这里插入图片描述

    2.创建包含16个列的索引

    CREATE INDEX idx_blog_user ON blog_user(
    	user_Name1,
    	user_Name2,
    	user_Name3,
    	user_Name4,
    	user_Name5,
    	user_Name6,
    	user_Name7,
    	user_Name8,
    	user_Name9,
    	user_Name10,
    	user_Name11,
    	user_Name12,
    	user_Name13,
    	user_Name14,
    	user_Name15,
    	user_Name16
    );
    

    执行结果如下(正常执行):
    在这里插入图片描述

    3.创建包含17个列的索引

    CREATE INDEX idx_blog_user ON blog_user(
    	user_Name1,
    	user_Name2,
    	user_Name3,
    	user_Name4,
    	user_Name5,
    	user_Name6,
    	user_Name7,
    	user_Name8,
    	user_Name9,
    	user_Name10,
    	user_Name11,
    	user_Name12,
    	user_Name13,
    	user_Name14,
    	user_Name15,
    	user_Name16,
    	user_Name17
    );
    

    执行结果如下(已经报错):

    在这里插入图片描述

     

    三、总结

    MySQL 一张表单个索引最多支持创建16个字段。

    原文:MySQL 一张表单个索引最多支持创建16个字段

    展开全文
  • mysql-联合索引最多几列

    千次阅读 2020-04-15 18:15:04
    mysql-联合索引最多几列 mysql联合索引最多几列?

    mysql-联合索引最多几列

    mysql联合索引最多几列?

    在这里插入图片描述

    展开全文
  • 分析 myisam存储引擎在创建索引的时候,索引键长度是有一较为严格的长度限制的,所有索引键最大长度总和不能超过1000,而且不是实际数据长度的总和,而是索引字段定义长度的总和。 主要字符集的计算方式: ...

    一、myisam存储引擎

    1. 数据库版本:阿里云RDS MySQL5.1

    mysql> select @@version;

    +-------------------------------+

    | @@version |

    +-------------------------------+

    | 5.1.61-Alibaba-rds-201404-log |

    +-------------------------------+

    1 row in set (0.00 sec)

    2. 测试的表结构信息

    mysql> show create table tb2\G

    *************************** 1. row ***************************

    Table: tb2

    Create Table: CREATE TABLE `tb2` (

    `a` varchar(255) DEFAULT NULL,

    `b` varchar(255) DEFAULT NULL,

    `c` varchar(255) DEFAULT NULL,

    `d` varchar(1000) DEFAULT NULL

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8

    1 row in set (0.00 sec)

    3. 测试加索引

    (1)添加单列索引,能够添加成功(报出warning),但实际添加的是前缀索引。

    mysql> alter table tb2 add index idx1 (d);

    Query OK, 0 rows affected, 2 warnings (0.00 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> show warnings;

    +---------+------+----------------------------------------------------------+

    | Level | Code | Message |

    +---------+------+----------------------------------------------------------+

    | Warning | 1071 | Specified key was too long; max key length is 1000 bytes |

    | Warning | 1071 | Specified key was too long; max key length is 1000 bytes |

    +---------+------+----------------------------------------------------------+

    2 rows in set (0.00 sec)

    表结构信息:

    mysql> show create table tb2\G

    *************************** 1. row ***************************

    Table: tb2

    Create Table: CREATE TABLE `tb2` (

    `a` varchar(255) DEFAULT NULL,

    `b` varchar(255) DEFAULT NULL,

    `c` varchar(255) DEFAULT NULL,

    `d` varchar(1000) DEFAULT NULL,

    KEY `idx1` (`d`(333))

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8

    1 row in set (0.00 sec)

    (2)添加组合索引,会执行失败。

    mysql> alter table tb2 add index idx1 (a,b);

    ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

    4. 分析

    myisam存储引擎在创建索引的时候,索引键长度是有一个较为严格的长度限制的,所有索引键最大长度总和不能超过1000,而且不是实际数据长度的总和,而是索引键字段定义长度的总和。

    主要字符集的计算方式:

    latin1 = 1 byte = 1 character

    uft8 = 3 byte = 1 character

    gbk = 2 byte = 1 character

    二、innodb存储引擎

    1. 表结构信息:

    mysql> create table tb1 (a varchar(255), b varchar(255), c varchar(255), d varchar(1000));

    Query OK, 0 rows affected (0.01 sec)

    2. 添加组合索引,报出waring,实际在某个单列上添加的是前缀索引

    mysql> alter table tb1 add index idx1(a,b,c,d);

    Query OK, 0 rows affected, 2 warnings (0.01 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> show warnings;

    +---------+------+---------------------------------------------------------+

    | Level | Code | Message |

    +---------+------+---------------------------------------------------------+

    | Warning | 1071 | Specified key was too long; max key length is 767 bytes |

    | Warning | 1071 | Specified key was too long; max key length is 767 bytes |

    +---------+------+---------------------------------------------------------+

    2 rows in set (0.00 sec)

    3. 添加单列索引,报出waring,实际添加的是前缀索引

    mysql> alter table tb1 add index idx2(d);

    Query OK, 0 rows affected, 2 warnings (0.02 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> show warnings;

    +---------+------+---------------------------------------------------------+

    | Level | Code | Message |

    +---------+------+---------------------------------------------------------+

    | Warning | 1071 | Specified key was too long; max key length is 767 bytes |

    | Warning | 1071 | Specified key was too long; max key length is 767 bytes |

    +---------+------+---------------------------------------------------------+

    2 rows in set (0.00 sec)

    mysql> show create table tb1\G

    *************************** 1. row ***************************

    Table: tb1

    Create Table: CREATE TABLE `tb1` (

    `a` varchar(255) DEFAULT NULL,

    `b` varchar(255) DEFAULT NULL,

    `c` varchar(255) DEFAULT NULL,

    `d` varchar(1000) DEFAULT NULL,

    KEY `idx1` (`a`,`b`,`c`,`d`(255)),

    KEY `idx2` (`d`(255))

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    1 row in set (0.00 sec)

    4. 分析:

    默认情况下,InnoDB 引擎单一字段索引的长度最大为 767 字节,同样的,前缀索引也有同样的限制。当使用 UTF-8 字符集,每一个字符使用 3 字节来存储,在 TEXT 或者 VARCHAR 类型的字段上建立一个超过 255 字符数的前缀索引时就会遇到问题。可以启用服务器选项 innodb_large_prefix 使得这个限制增加到 3072 字节,而且表的 row_format 需要使用 compressed 或者 dynamic。

    三、使用前缀索引带来的风险:

    INNODB的索引会限制单独Key的最大长度为767字节,超过这个长度必须建立小于等于767字节的前缀索引。

    此外,BLOB和TEXT类型的列只能创建前缀索引。

    前缀索引能提高索引建立速度和检索速度,但是下面情况是无法使用前缀索引的:

    索引覆盖扫描

    通过索引的排序(order by, group by)

    还是在上面的测试表上:

    mysql> explain select * from tb1 order by d;

    +----+-------------+-------+------+---------------+------+---------+------+------+----------------+

    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

    +----+-------------+-------+------+---------------+------+---------+------+------+----------------+

    | 1 | SIMPLE | tb1 | ALL | NULL | NULL | NULL | NULL | 5 | Using filesort |

    +----+-------------+-------+------+---------------+------+---------+------+------+----------------+

    1 row in set (0.00 sec)

    mysql> explain select * from tb1 group by d;

    +----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+

    | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

    +----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+

    | 1 | SIMPLE | tb1 | ALL | NULL | NULL | NULL | NULL | 5 | Using temporary; Using filesort |

    +----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+

    1 row in set (0.00 sec)

    展开全文
  • 索引:Inoodb 表结构id dtEventTime iType iMoney iAction时间 类型 金钱 动作在 where 的两列上都有索引alter table costmoney add Index test(dtEventTime,iType)SQlEXPLAIN select count(*) from CostMoney WHERE ...
  • 凯哥这里使用了第二种方案 2:修改联合主键中每个字段的长度 联合主键的三个字段如下: `registry_group` varchar(50) NOT NULL, `registry_key` varchar(255) NOT NULL, `registry_value` varchar(255) NOT NULL, ...
  • 【MongoDB】复合索引

    2017-09-29 16:25:17
    MongoDB支持复合索引,所谓复合索引就是一个索引包含多个字段,例如为如下collection建立一个复合索引: collection { user_id: score: …… }db.col.createIndex({‘user_id’ : 1, ‘score’ : -1})有数据库...
  • 一、MySql官网文档解释 在**mysql5.***中描述如下 Different limits related to ... 执行结果如下(已经报错): 三、总结 MySQL 一张表单个索引最多支持创建16个字段。换句话说:单张表最多允许包含16个列的组合索引。
  • 联合索引:只要是按照了索引创建顺序来编写where条件,那么就可以使用到这个索引,并且大几率是覆盖索引,同时也符合最左匹配原则。 而最左匹配原则与条件中的字段顺序无关。只需要按照索引创建顺序最左字段存在即可
  • 如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中的可选性或约束性都不强,如一个纳税人识别号有很多纳税记录,一个税务机关代码和同一月份记录就更多了,所以3个字段合起来,"某个纳税人识别号+...
  • oracle索引详解

    千次阅读 2021-05-01 08:31:45
    索引对于Oracle学习来说,非常重要,在数据量巨大的状况下,使用恰到好处的索引,将会使得数据查询时间大大减少。1、索引的创建语法:CREATE UNIUQE | BITMAP INDEX .ON .( | ASC | DESC, | ASC | DESC,...)...
  • mysql可以设置联合唯一索引吗?

    千次阅读 2021-01-18 21:11:58
    mysql可以设置联合唯一索引,方法:使用...联合唯一索引项目需要将某个表的某两个字段添加唯一索引,保证这两个字段的值不能同时重复。Alter table 表名 add UNIQUE index 索引名 (字段1,字段2)当表中已经存在重复数...
  • 数据库索引(Oracle )

    千次阅读 2019-08-05 14:36:38
    每个索引不超过3个字段索引匹配时,可以包含关系,但脚本中的字段在索引的前面的连续字段时,正常索引,否则会变成skip索引索引性能下降70%),如SQL条件里有C1,C3字段,如果索引是C1, C2,C3,则是 Skip ...
  • oracle唯一索引

    千次阅读 2022-04-12 11:22:47
    为NULL的字段可以设置唯一索引 1:多条字段为NULL的记录,可以正常插入数据库中 2:重复值插入会正常校验重复值 Tips:设置字符串null也是会校验重复值 ...单独查询这个字段值,可以命中索引查询 ...
  • 有以下种创建方式:1.创建索引代码如下:CREATE INDEX indexName ON mytable(username(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,...
  • 组合索引注意事项

    千次阅读 2017-05-05 17:12:21
    选择索引字段的原则,比如外键字段、数据类型较小的字段、经常用于查询或排序的字段、表关联的字段等等,在此不做赘述。本人在工作中见到过很多人创建的索引,回想自己以前也会有理论知识空洞的体会,总感觉理论知识...
  • mysql的表最多可设置多少字段

    万次阅读 热门讨论 2019-11-12 20:29:17
    最近在开发的时候,遇到一报错:Can't create tablexxx(errno: 185 "Too many columns")根据英文,意思是表的字段太多了,那么mysql的数据表最多能有多少列呢?       怀着虔诚的...
  • mysql多字段唯一索引

    2021-01-19 21:46:20
    例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定:例如:user表中有userID,userName两个字段,如果不希望有2条一模一样的记录,需要给user表添加多个字段的联合唯一索引:alter...
  • 之所以还写这篇博文,是因为好多人还一直保留着一条sql语句只能使用一个索引的错误观念。本文会通过一些示例来说明如何使用索引合并。什么是索引合并下面我们看下mysql文档中对索引合并的说明:The Index Merge ...
  • MySQL的一个表最多可以有多少个字段

    万次阅读 2016-07-12 16:11:08
    原文:http://mp.weixin.qq.com/s?__biz=MzAwMjkyMjEwNg==&mid=2247483785&idx=1&sn=1d90a44915d1028c6dc150367e1af033#rd ...*如果我将下面表中的varchar(200),修改成text(或blob):报错变为另一:*
  • 如果表中查询的列有一个索引,MySQL能快速到达一位置去搜寻到数据文件的中间,没有必要看所有数据。大多数MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)在B树中存储。只是空间列类型的索引使用R-树,并且ME...
  • 字段索引不能满足你了,那就多来几个...创建普通索引的时候,指定两个或更多的字段这就是联合索引,语法如下alter table 表 add index 索引名(字段1,字段2)维护数据库时发现现索引重复了?这时可以删掉重复的索引...
  • 索引可以提高数据的检索效率,也可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。排序分组操作主要消耗的就是CPU资源和...那些只存储固定几个值的字段,例如用户登录状态、消息的status等。这个涉及到
  • MySQL 复合索引

    2021-01-20 02:22:31
    一、1.索引越少越好,在修改数据时...如果您很可能对一两列索引中的两列执行单独的搜索,则应该创建另一仅包含第二列的索引。如上图所示,如果查询中需要对年龄和性别做查询,则应当再新建一包含年龄和性别...
  • 一、可以创建多个索引嘛? 可以创建多个索引的。 需要开发人员根据实际的用途以及数据库中记录的情况,来进行判断。 通常来说,表的索引越多,其查询的速度也就越快。但是,表的insert/update速度则会降低。这主要是...
  • 展开全部主键只有一个,但是可以设置为多个字段为主键,也即联合主键。62616964757a686964616fe58685e5aeb931333366306538外键就是自己设置了也即可以有多个,可以设置除主键以外的其他字段全部是外键的。数据库的每...
  • 在网上看一些文章的时候,发现好次下面这样的话:如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引,因为两个单独索引通常数据库只能使用其中一个,而使用复合索引因为索引本身就...
  • 最多有一条为空或者其他值的数据 解决办法:唯一索引可在索引列插入多次null email可以有多条email为null的记录,将冲突的字段设置为null,解决 在sql server中,唯一索引字段不能出现多null值 在mysql 的innodb...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,671
精华内容 32,268
关键字:

索引最多几个字段