首先这里建立一张数据表,并建立符合索引( index_A,index_B,index_C)

CREATE TABLE `test_index_sequence` (

`Id` int(11) NOT NULL AUTO_INCREMENT, 
`index_A` varchar(255) DEFAULT NULL, 
`index_B` varchar(255) DEFAULT NULL, 
`index_C` varchar(255) DEFAULT NULL, 
`field_D` varchar(255) DEFAULT NULL, 
PRIMARY KEY (`Id`), 
KEY `complex_index` (`index_A`,`index_B`,`index_C`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

数据插入完成后,下面开始逐步验证索引的有效性。

1、单独使用字段index_A:

EXPLAIN 
SELECT * 
FROM test_index_sequence 
WHERE index_A='a'

通过EXPLAIN分索引有效;

2、单独使用字段index_B:

EXPLAIN 
SELECT * 
FROM test_index_sequence 
WHERE index_B='b'

通过索引失效;

3、单独使用字段index_C:

EXPLAIN 
SELECT * 
FROM 
test_index_sequence 
WHERE index_C='c'

查看分析结果,索引失效;

4、联合使用字段index_A,index_B:EXPLAIN 
SELECT * 
FROM test_index_sequence 
WHERE index_A='a' AND index_B='b'
查看分析结果,索引有效; 
5、联合使用字段index_A,index_C:EXPLAIN 
SELECT * 
FROM test_index_sequence 
WHERE index_A='a' AND index_C='c'
查看分析结果,索引有效;

6、联合使用字段index_B,index_C:

EXPLAIN 
SELECT * 
FROM test_index_sequence 
WHERE index_B='b' AND index_C='c'

查看分析结果,索引失效;

7、联合使用字段index_A,index_B,index_C:

EXPLAIN 
SELECT * 
FROM test_index_sequence 
WHERE index_A='a' AND index_B='b' AND index_C='c'

查看分析结果,索引有效;

综述:MySQL的复合索引遵循了最左前缀原则,当建立索引(index_A,index_B,index_C)时:

使用索引有效的字段为:'index_A’,'index_A,index_B’,'index_A,index_B,index_C’;

使用索引失效的字段为:'index_B’,'index_C’,'index_C,index_B’;

MySQL之索引复合索引有效性的更多相关文章

  1. 关于mysql建立索引 复合索引 索引类型

    这两天有个非常强烈的感觉就是自己在一些特别的情况下还是hold不住,脑子easy放空或者说一下子不知道怎么去分析问题了,比方,问"hash和btree索引的差别",这非常难吗.仅仅 ...

  2. mongodb索引 复合索引

    当我们的查询条件不只有一个时,就需要建立复合索引,比如插入一条{x:1,y:2,z:3}记录,按照我们之前建立的x为1的索引,可是使用x查询,现在想按照x与y的值查询,就需要创建如下的索引     创 ...

  3. MySQL 最左前缀(Leftmost Prefix) & 组合索引(复合索引,多列索引)

    资料来源于网络,仅供参考学习. CREATE TABLE test(a INT,b INT,c INT,KEY idx(a,b,c)); 优: SELECT * FROM test WHERE a=1 ...

  4. MySQL复合索引探究

    复合索引(又称为联合索引),是在多个列上创建的索引.创建复合索引最重要的是列顺序的选择,这关系到索引能否使用上,或者影响多少个谓词条件能使用上索引.复合索引的使用遵循最左匹配原则,只有索引左边的列匹配 ...

  5. MySQL进阶之MySQL索引以及索引优化

    本文配合B站学习视频BV1es411u7we使用效果更佳. 1. MySQL版本 主流版本:5.x版 5.0 - 5.1:早期产品的延续,升级维护 5.4 - 5.x:MySQL整合了三方公司的新存储 ...

  6. Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则

    Mysql高级操作 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 树的区别: 二叉树:可能产生不平衡,顺序数据可能会出现链表结构 ...

  7. Mysql复合索引

    当Mysql使用索引字段作为条件时,如果该索引是复合索引,必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引不会被使用,并且应尽可能地让索引顺序和字段顺序一致

  8. MySQL创建复合索引

    在MySQL数据库中,创建复合索引的时候,不知道在创建过程中哪个列在前面,哪个列该在后面,用以下方式即可: select count(distinct first_name)/count(*) as ...

  9. mySql的普通索引和复合索引

    有关普通索引和组合索引问题: 索引分单列索引和组合索引:单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引:组合索引,即一个索包含多个列.   MySQL索引类型包括:   ...

随机推荐

  1. STP相关概念

    1)桥ID(Bridge ID)=Bridge Priority+MAC 2)  端口ID(Port ID)=Port Priority+Port No 3)桥根 4)非桥根 5)根端口 6)指定端口 ...

  2. Windows内核-7-(IRP)I/O请求包

    Windows内核-7-(IRP)I/O请求包 IRP(I/O Request Packet)就是一个进行I/O操作的请求包. IRP是一个结构体,谁分配谁就得释放,通常由执行体里的管理器,获取内核驱 ...

  3. 01-ADB命令获取包名、界面名

    命令代码 adb shell dumpsys window |findstr mFocusedApp

  4. SpringBoot快速入门(一)

    本文内容 SpringBoot概述 SpringBoot快速入门 SpringBoot起步依赖原理分析 SpringBoot配置 SpringBoot整合其他框架 1.SpringBoot概述 1.1 ...

  5. C#多线程---Monitor实现线程同步

    一.简介 Monitor.Enter和Monitor.Exit方法来实现线程同步,这个属于排他锁,即每次只有一个线程可以访问共享数据. C#中通过lock关键字来提供简化的语法,lock可以理解为Mo ...

  6. ubuntu编译安装python3.6.5

    去官网下载安装包放到~/software/   下 1更新软件库 sudo apt-get update 2安装相应的开发库 sudo apt-get install zlib1g-dev libbz ...

  7. ubuntu下配置JDK的一些坑点

    ubuntu下配置JDK的一些坑点 在centos下的JDK配置: 在ubuntu下的话,要修改两个地方: 在/etc/enviornment中配置! 在/etc/profile中配置! 写在最后: ...

  8. C# - 习题01_写出程序的输出结果a.Fun2(b)、b.Fun2(a)

    时间:2017-08-23 整理:byzqy 题目:请写出下列程式的结果: 文件:A.cs 1 using System; 2 3 namespace InterView 4 { 5 public c ...

  9. Mac automator bash 自动操作 右键菜单unrar解压 拷贝文件路径到剪贴板 快速删除(rm -rf) 快捷键设置

    https://tecadmin.net/pass-command-line-arguments-in-shell-script/ https://tecadmin.net/tutorial/bash ...

  10. MyBatis-Plus 代码生成器模板

    MyBatis-Plus 代码生成器模板 maven 依赖 <!--Mysql--> <dependency> <groupId>mysql</groupId ...