首先这里建立一张数据表,并建立符合索引( 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. SQL 练习34

    求每门课程的学生人数 SELECT cid,COUNT(cid) 课程人数 from sc GROUP BY cid

  2. .NET Core 微服务学习与实践系列文章目录索引(2019版)

    参考网址: https://archy.blog.csdn.net/article/details/103659692 2018年,我开始学习和实践.NET Core,并开始了微服务的学习,以及通过各 ...

  3. Linux下Qt创建共享库与链接共享库详解

    随着程序写的逐渐变多,或多或少的我们都会使用别人写好的库:或者我们不想让别人看到我们的一些核心程序,可以将核心程序封装成库.本次和大家分享的是在Ubuntu下使用Qt生成共享库以及在Qt中链接共享库的 ...

  4. IIS 站点一键导入 导出

    C:\Windows\System32\inetsrv\appcmd list site /config /xml > c:\sites.xml C:\Windows\System32\inet ...

  5. 深入浅出Mybatis系列(七)---TypeHandler简介

    无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型.Mybatis默认 ...

  6. Spring详解(一)------IOC控制反转

    1.什么是 IOC? IOC-Inversion of Control,即控制反转.它不是什么技术,而是一种设计思想. 传统的创建对象的方法是直接通过 new 关键字,而 spring 则是通过 IO ...

  7. 通过refresh响应头,定时刷新或隔n秒跳转页面

    package day08; import java.io.IOException; import javax.servlet.ServletException; import javax.servl ...

  8. Java事件模型

    1 import javax.swing.*; 2 import java.awt.event.*; 3 public class TestSourceListener { 4 5 public st ...

  9. 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道. ECC 是 "Error Correc ...

  10. java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit(index_jsp.java:40)

    做JSP页面时,出现如下错误,把如上面依赖下面一个去除即可