mysql 复合索引(联合索引) a b c的使用
本博文中所用数据版本为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 四种组合结果
- 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
可能用到复合索引,实际用到复合索引。
- 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
可能用到复合索引,实际用到复合索引。
- 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的使用相关推荐
- mysql复合索引(联合索引)的使用场景
什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...
- mysql复合索引使用场景_mysql复合索引(联合索引)的使用场景
什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...
- mysql复合索引的应用场景_mysql复合索引(联合索引)的使用场景
什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...
- MySQL中的联合索引学习教程
MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到右的 ...
- Mysql中的联合索引、前缀索引、覆盖索引
Mysql中的联合索引.前缀索引.覆盖索引 索引 索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度. 联合索引 又名复 ...
- 复合索引 /多列索引 /联合索引 /组合索引?????
复合索引 /多列索引 /联合索引 /组合索引,一个意思,不同叫法. 含有多个列字段的索引 联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2. 例如: 创建数据库表CREATE ...
- mysql复合索引(联合索引)用法以及最左原则
1.准备表(含23w数据) SELECT COUNT(*) FROM index_test; 2.查看索引,只有一个主键索引 3.创建联合索引(abc) ALTER TABLE index_test ...
- sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)
一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好 ...
- MySQL中的联合索引
联合索引:也叫复合索引,指对表上的两个或两个以上的列字段进行索引.Mysql从左到右使用索引中的字段,一个查询可以只使用索引中的一部分,但只能是最左侧部分.例如索引是key index (a,b,c) ...
最新文章
- springmvc.xml 中 url-pattern/url-pattern节点详解
- 优雅还不够,简洁才高效!——用NValidator一句话搞定客户端检测
- POJ 3517 And Then There Was One( 约瑟夫环模板 )
- 学习笔记02:直播串讲——3/22
- 今年大学毕业照画风太清奇.....我忍不住笑出了声!
- java的string访问某个元素_CSS伪类与伪元素总是傻傻分不清,这份总结够面试用了
- Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)
- git 常用指令 -
- 若依如何调整首页左侧菜单栏宽度?
- 苹果修复三个已遭利用的 iOS 0day
- 10.RabbitMQ实战 --- 监控
- 键盘IO中断调用(INT 16)
- WebView load**方法 加载资源【总结】
- win10把用户中文名改为英文名
- AltiumDesigner之Logo制作
- HDU 4427 Math Magic (2012长春-dp )
- C - Write the program expr which evaluates a reverse Polish expression from the command line
- 大量数据导出Excel方案
- 60创意的USB设备和小工具
- 前女友闺蜜给我发了一个压缩包,居然还带密码?暴力破解ZIP加密文件的密码!