本博文中所用数据版本为mysql 5.7.28
通过命令行查看 mysql版本信息如下:

~ mysql --version
mysql Ver 14.14 Distrib 5.7.28, for macos10.14 (x86_64) using EditLine wrapper

缘由:经常面试被问到 符合索引 (a,b,c) 这三个字段组成的符合复合(联合索引)是否使用的问题。网上答案 通常这样解释

复合索引(联合索引)情况下
a b c 三个字段

在用到 where 条件为

  • a && b && c 的情况下 会用到联合索引
  • a && b 的情况下也会用到索引
  • a && c 的情况下不会用到索引
  • b && c 的情况下不会用到索引

上述解释为 错误的 因此,重新整理博文供大家参考。

实际结果如下:
数据库版本如上文 mysql 5.7.28
建表语句为

CREATE TABLE `test` (`id` int(11) NOT NULL AUTO_INCREMENT,`aid` varchar(20) NOT NULL DEFAULT '' COMMENT 'aid',`bid` varchar(20) NOT NULL DEFAULT '' COMMENT 'bid',`cid` varchar(20) NOT NULL DEFAULT '' COMMENT 'cid',PRIMARY KEY (`id`),KEY `abc` (`aid`,`bid`,`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

为测试插入数据

UPDATE `study`.`test` SET `aid` = 'a01', `bid` = 'b01', `cid` = 'c01' WHERE `id` = 1;
UPDATE `study`.`test` SET `aid` = 'a02', `bid` = 'b02', `cid` = 'c02' WHERE `id` = 2;
UPDATE `study`.`test` SET `aid` = 'a03', `bid` = 'b02', `cid` = 'c03' WHERE `id` = 3;

组合结果为 abc ab ac bc 四种组合结果

  1. abc 组合结果为
mysql> explain select * from test where aid='a01' and bid='b01' and cid='c01'\G;
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: testpartitions: NULLtype: ref
possible_keys: abckey: abckey_len: 186ref: const,const,constrows: 1filtered: 100.00Extra: Using index
1 row in set, 1 warning (0.00 sec)ERROR:
No query specified

可能用到复合索引,实际用到复合索引。

  1. ab 的组合结果如下
mysql> explain select * from test where aid='a01' and bid='b01' \G;
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: testpartitions: NULLtype: ref
possible_keys: abckey: abckey_len: 124ref: const,constrows: 1filtered: 100.00Extra: Using index
1 row in set, 1 warning (0.00 sec)ERROR:
No query specified

可能用到复合索引,实际用到复合索引。

  1. ac 的组合情况下
explain select * from test where aid='a01'  and cid='c01'\G;
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: testpartitions: NULLtype: ref
possible_keys: abckey: abckey_len: 62ref: constrows: 1filtered: 33.33Extra: Using where; Using index
1 row in set, 1 warning (0.00 sec)ERROR:
No query specified

可能用到复合索引,实际用到复合索引。

结论:
复合索引(abc) 所有情况的罗列,如有错请联系我 ,以下结果都是经过本人实操所得,bca和 cab 也能用到索引是mysql优化器优化的结果,最根本的还是最左原则
abc 能用到索引
bca 能用到索引
cab 能用到索引
ab 能用到索引
ac 能用到索引
ba 能用到索引
ca 能用到索引
bc 用不到索引
b 用不到索引
c 用不到索引
cb 用不到索引

mysql 复合索引(联合索引) a b c的使用相关推荐

  1. mysql复合索引(联合索引)的使用场景

    什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...

  2. mysql复合索引使用场景_mysql复合索引(联合索引)的使用场景

    什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...

  3. mysql复合索引的应用场景_mysql复合索引(联合索引)的使用场景

    什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...

  4. MySQL中的联合索引学习教程

    MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到右的 ...

  5. Mysql中的联合索引、前缀索引、覆盖索引

    Mysql中的联合索引.前缀索引.覆盖索引 索引 索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度. 联合索引 又名复 ...

  6. 复合索引 /多列索引 /联合索引 /组合索引?????

    复合索引 /多列索引 /联合索引 /组合索引,一个意思,不同叫法. 含有多个列字段的索引 联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2. 例如: 创建数据库表CREATE ...

  7. mysql复合索引(联合索引)用法以及最左原则

    1.准备表(含23w数据) SELECT COUNT(*) FROM index_test; 2.查看索引,只有一个主键索引 3.创建联合索引(abc) ALTER TABLE index_test ...

  8. sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)

    一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好 ...

  9. MySQL中的联合索引

    联合索引:也叫复合索引,指对表上的两个或两个以上的列字段进行索引.Mysql从左到右使用索引中的字段,一个查询可以只使用索引中的一部分,但只能是最左侧部分.例如索引是key index (a,b,c) ...

最新文章

  1. springmvc.xml 中 url-pattern/url-pattern节点详解
  2. 优雅还不够,简洁才高效!——用NValidator一句话搞定客户端检测
  3. POJ 3517 And Then There Was One( 约瑟夫环模板 )
  4. 学习笔记02:直播串讲——3/22
  5. 今年大学毕业照画风太清奇.....我忍不住笑出了声!
  6. java的string访问某个元素_CSS伪类与伪元素总是傻傻分不清,这份总结够面试用了
  7. Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)
  8. git 常用指令 -
  9. 若依如何调整首页左侧菜单栏宽度?
  10. 苹果修复三个已遭利用的 iOS 0day
  11. 10.RabbitMQ实战 --- 监控
  12. 键盘IO中断调用(INT 16)
  13. WebView load**方法 加载资源【总结】
  14. win10把用户中文名改为英文名
  15. AltiumDesigner之Logo制作
  16. HDU 4427 Math Magic (2012长春-dp )
  17. C - Write the program expr which evaluates a reverse Polish expression from the command line
  18. 大量数据导出Excel方案
  19. 60创意的USB设备和小工具
  20. 前女友闺蜜给我发了一个压缩包,居然还带密码?暴力破解ZIP加密文件的密码!

热门文章

  1. 淡泊名利、心胸开阔,卸甲不归田,百岁老人范绪箕
  2. 高并发写场景:秒杀系统库存扣减
  3. FFB6D A Full Flow Bidirectional Fusion Network for 6D Pose EstimationFFB6D 6D 姿势估计的全流双向融合网络
  4. 查找、替换使用正则表达式
  5. 时间序列预测新范式——基于迁移学习的AdaRNN方法
  6. python基础学习(九)——堡垒机案例
  7. 模拟cmos集成电路(7)
  8. 产品经理VISIO操作
  9. 【PBR系列三】BRDF方程及渲染方程
  10. Opencv的学习之图像滤波