MySQL之索引复合索引有效性
首先这里建立一张数据表,并建立符合索引( 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之索引复合索引有效性的更多相关文章
- 关于mysql建立索引 复合索引 索引类型
这两天有个非常强烈的感觉就是自己在一些特别的情况下还是hold不住,脑子easy放空或者说一下子不知道怎么去分析问题了,比方,问"hash和btree索引的差别",这非常难吗.仅仅 ...
- mongodb索引 复合索引
当我们的查询条件不只有一个时,就需要建立复合索引,比如插入一条{x:1,y:2,z:3}记录,按照我们之前建立的x为1的索引,可是使用x查询,现在想按照x与y的值查询,就需要创建如下的索引 创 ...
- MySQL 最左前缀(Leftmost Prefix) & 组合索引(复合索引,多列索引)
资料来源于网络,仅供参考学习. CREATE TABLE test(a INT,b INT,c INT,KEY idx(a,b,c)); 优: SELECT * FROM test WHERE a=1 ...
- MySQL复合索引探究
复合索引(又称为联合索引),是在多个列上创建的索引.创建复合索引最重要的是列顺序的选择,这关系到索引能否使用上,或者影响多少个谓词条件能使用上索引.复合索引的使用遵循最左匹配原则,只有索引左边的列匹配 ...
- MySQL进阶之MySQL索引以及索引优化
本文配合B站学习视频BV1es411u7we使用效果更佳. 1. MySQL版本 主流版本:5.x版 5.0 - 5.1:早期产品的延续,升级维护 5.4 - 5.x:MySQL整合了三方公司的新存储 ...
- Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则
Mysql高级操作 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 树的区别: 二叉树:可能产生不平衡,顺序数据可能会出现链表结构 ...
- Mysql复合索引
当Mysql使用索引字段作为条件时,如果该索引是复合索引,必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引不会被使用,并且应尽可能地让索引顺序和字段顺序一致
- MySQL创建复合索引
在MySQL数据库中,创建复合索引的时候,不知道在创建过程中哪个列在前面,哪个列该在后面,用以下方式即可: select count(distinct first_name)/count(*) as ...
- mySql的普通索引和复合索引
有关普通索引和组合索引问题: 索引分单列索引和组合索引:单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引:组合索引,即一个索包含多个列. MySQL索引类型包括: ...
随机推荐
- SQL 练习34
求每门课程的学生人数 SELECT cid,COUNT(cid) 课程人数 from sc GROUP BY cid
- .NET Core 微服务学习与实践系列文章目录索引(2019版)
参考网址: https://archy.blog.csdn.net/article/details/103659692 2018年,我开始学习和实践.NET Core,并开始了微服务的学习,以及通过各 ...
- Linux下Qt创建共享库与链接共享库详解
随着程序写的逐渐变多,或多或少的我们都会使用别人写好的库:或者我们不想让别人看到我们的一些核心程序,可以将核心程序封装成库.本次和大家分享的是在Ubuntu下使用Qt生成共享库以及在Qt中链接共享库的 ...
- IIS 站点一键导入 导出
C:\Windows\System32\inetsrv\appcmd list site /config /xml > c:\sites.xml C:\Windows\System32\inet ...
- 深入浅出Mybatis系列(七)---TypeHandler简介
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型.Mybatis默认 ...
- Spring详解(一)------IOC控制反转
1.什么是 IOC? IOC-Inversion of Control,即控制反转.它不是什么技术,而是一种设计思想. 传统的创建对象的方法是直接通过 new 关键字,而 spring 则是通过 IO ...
- 通过refresh响应头,定时刷新或隔n秒跳转页面
package day08; import java.io.IOException; import javax.servlet.ServletException; import javax.servl ...
- Java事件模型
1 import javax.swing.*; 2 import java.awt.event.*; 3 public class TestSourceListener { 4 5 public st ...
- 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道. ECC 是 "Error Correc ...
- java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit(index_jsp.java:40)
做JSP页面时,出现如下错误,把如上面依赖下面一个去除即可