首先这里建立一张数据表,并建立符合索引( 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. C#设计模式---迭代器模式(Iterator Pattern)

    一.目的 提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节. 二.定义 迭代器模式提供了一种方法访问一个聚合对象(理解为集合对象)中各个元素,而又无需暴露该对象的内部表示,这样既可 ...

  2. 寻找最短路径Dijkstra算法

    1 /** 2 * 1.对于T中的每个顶点u,找到u的具有最小权重的连接边.所有到u的连接边都存储在queues.get(u)中.queues.get(u).peek()返回拥有最小权值 3 * 的连 ...

  3. docker安装与配置gitlab详细过程

    docker安装与配置gitlab详细过程 1.打开网易镜像中心 https://c.163yun.com/hub#/m/home/ 2.搜索gitlab,获取下载地址.例如:docker pull  ...

  4. FXGL游戏开发-JavaFX游戏框架

    FXGL 是一个JavaFX 游戏开发的框架,这个框架有两个版本,其中基于JDK1.8的版本已经不再维护,目前最新的是基于JDK11的版本,也就是Openjfx的版本. FXGL 提供了各种游戏范例: ...

  5. 我说Java完全面向对象,老大过来就是一jio

    哈喽,大家好,我是指北君.自从开始学Java,就知道Java是一门面向对象编程的语言,所以在指北君眼中,Java就是完全面向对象的.有一天老大问到我这个事情,我脱口而出,结果老大过来就是一jio... ...

  6. vue中的v-cloak指令

    v-cloak不需要表达式,它会在vue实例结束编译时从绑定的html元素上移除,经常和display:none;配合使用: <div id="app" v-cloak> ...

  7. 一个简单的 aiax请求例子

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  8. win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑

    本文来告诉大家如何通过 Win2d 完全控制笔迹绘制逻辑,本文适合用来实现复杂的自定义逻辑,可以完全控制笔迹的行为.包括在书写过程中切换模式,如进行手势擦除切换为橡皮擦模式 本文提供的方法适合用来做复 ...

  9. IO流学习笔记(一)之FileWriter与FileReader

    IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 流按照操作数据分为两种:字节流和字符流 流按流向分为:输入流和输出流 输入流和输出流是相对于 ...

  10. 哲学家就餐问题-Java语言实现死锁避免

    哲学家就餐问题-Java语言实现死锁避免 我死锁预防是至少破坏死锁产生的四个必要条件之一,带来的问题就是系统资源利用率低且不符合开发习惯,而死锁避免不是事先釆取某种限制措施破坏死锁的必要条件,只是注意 ...