MySQL联合索引(复合索引)

系统管理员 2023-10-06 17:18 70阅读 0赞

Mysql联合唯一索引添加相同数据插入报错

联合索引在两个字段都存在唯一,将报错。

1.添加联合索引

  1. alter table "表名" add unique index(`字段1``字段2`)

2.此时如果在插入相同的数据会报错,可以使用 no duplicate key update 解决相同数据不存储,不会报错

  1. insert into "表名" `name``age``time`values('zhangsan''18''2001:10:10') on duplicate key
  2. update `name`=values(`name`),`age`=values(`age`)

联合索引

本文中联合索引的定义为(MySQL):

  1. ALTER TABLE `table_name` ADD INDEX (`col1`,`col2`,`col3`);

联合索引的优点

若多个一条SQL,需要多个用到两个条件

  1. SELECT * FROM `user_info` WHERE username='XX',password='XXXXXX';

当索引在检索 password 字段的时候,数据量大大缩小,索引的命中率减小,增大了索引的效率。

符合索引的索引体积比单独索引的体积要小,而且只是一个索引树,相比单独列的索引要更加的节省时间复杂度和空间复杂度。

联合索引命中的本质(最左匹配的理解)

定义

当创建( col1,col2,col3 )联合索引时,相当于创建了( col )单列索引,( clo1,clo2 )联合索引以及( col1,col2,col3 )联合索引想要索引生效,只能使用 col1col1,col2col1,col2,col3 三种组合;

当然,col1,col3 组合也可以,但实际上只用到了 col1 的索引,col3 并没有用到!

图解

在这里插入图片描述

通俗理解

联合索引相当于一个按照姓氏——名字的一个电话簿,只能先确定姓氏才可以命中索引,下列可以正确命中联合索引的语句( =IN 直接的字段都可以乱序,MySQL的查询优化器可以优化成索引识别的形式)

  1. -- 只命中 col1col2
  2. SELECT * FROM `table_name` WHERE `col1`='XX';
  3. -- 命中col1col2col1col2的顺序可以颠倒
  4. SELECT * FROM `table_name` WHERE `clo1`='XX',`clo2`='XXX';
  5. SELECT * FROM `table_name` WHERE `clo2`='XXX', `clo1`='XX';
  6. -- 命中col1,col2,col3,同理,三个列的顺可以颠倒
  7. SELECT * FROM `table_name` WHERE `col1`='X',`col2`='XX',`col3`='XXX';
  8. SELECT * FROM `table_name` WHERE `col1`='X',`col3`='XX',`col2`='XXX';
  9. SELECT * FROM `table_name` WHERE `col2`='X',`col3`='XX',`col1`='XXX';

发表评论

表情:
评论列表 (有 0 条评论,70人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL联合索引

    合索引: 索引在数据库系统中是个一物理文件,索引越多,该文件占用的磁盘越大,查询时效率也越低;所以数据库优化中切不可盲目使用索引,在同一表中需要对多列创建索引时,联合索...

    相关 MySQL-联合索引

      一、什么是联合索引   两个或更多个列上的索引被称作联合索引,联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,

    相关 mysql联合索引测试

    mysql联合索引和查询条件的匹配原则: 只有当联合索引的第一个字段在where条件中出现时,才会使用索引查询,不然就是全表扫描查询。 表的索引为:  KEY \`Ind

    相关 mysql联合索引

    命名规则:表名\_字段名 1、需要加索引的字段,要在where条件中 2、数据量少的字段不需要加索引 3、如果where条件中是OR关系,加索引不起作用 4、符

    相关 MySQL联合索引

    一、什么是联合索引   两个或更多个列上的索引被称作联合索引,联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只

    相关 复合(联合)索引失效解析

     复合(联合)索引失效解析 比较简单的是单列索引(b+tree)。遇到多条件查询时,不可避免会使用到多列索引。联合索引又叫复合索引。 b+tree结构如下: 每一个磁盘