Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL联合索引or_MySQL联合索引命中条件

MySQL联合索引or_MySQL联合索引命中条件

作者头像
全栈程序员站长
发布于 2022-08-27 05:58:46
发布于 2022-08-27 05:58:46
2.2K0
举报

大家好,又见面了,我是你们的朋友全栈君。

转于:https://blog.csdn.net/claram/article/details/77574600

首先明确:为什么要用联合索引?

对于查询语句“SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2”涉及到两列,这个时候我们一般采用一个联合索引(e1, e3);而不用两个单列索引,这是因为一条查询语句往往应为mysql优化器的关系只用一个索引,就算你有两个索引,他也只用一个;在只用一个的基础之上,联合索引是会比单列索引要快的;

下面讲讲联合索引的使用规则和哪些情况会命中不了联合索引

示例如下。首先创建表:

CREATE TABLE E (e1 INT, e2 VARCHAR(9), e3 INT, PRIMARY KEY(e1, e3));

这样就建立了一个联合索引:e1,e3

测试数据

INSERT INTO E

(e1, e2, e3)

VALUES(1, ‘aa’, 2);

触发联合索引是有条件的:

1、使用联合索引的全部索引键,可触发索引的使用。

例如:SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2

2、使用联合索引的前缀部分索引键,如“key_part_1 常量”,可触发索引的使用。

例如:SELECT E.* FROM E WHERE E.e1=1

3、使用部分索引键,但不是联合索引的前缀部分,如“key_part_2 常量”,不可触发索引的使用。

例如:SELECT E.* FROM E WHERE E.e3=1

4、使用联合索引的全部索引键,但索引键不是AND操作,不可触发索引的使用。

例如:SELECT E.* FROM E WHERE E.e3=2 OR E.e1=1

以上通过explain测试即可看出效果

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146056.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mysql联合索引详解
比较简单的是单列索引(b+tree)。遇到多条件查询时,不可避免会使用到多列索引。联合索引又叫复合索引。
全栈程序员站长
2022/09/06
1.4K0
mysql联合索引详解
深入浅析Mysql联合索引原理 之 最左匹配原则。
之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和大牛交流中,发现遗漏了些东西,这里自己整理一下这方面的内容。
全栈程序员站长
2022/09/07
1.6K0
深入浅析Mysql联合索引原理 之 最左匹配原则。
MySQL选错索引导致的线上慢查询事故
又和大家见面了!又两周过去了,我的云笔记里又多了几篇写了一半的文章草稿。有的是因为质量没有达到预期还准备再加点内容,有的则完全是一个灵感而已,内容完全木有。羡慕很多大佬们,一周能产出五六篇文章,给我两个肝我都不够。好了,不多说废话了...
蛮三刀酱
2020/07/30
2.6K0
联合索引这点事儿
按照ER图,建立数据库和表,并且进行测试数据的填充。(建表sql和填充脚本的文件可公众号(Vegout)回复关键字“联合索引”获取)
naget
2019/07/03
6120
联合索引这点事儿
mysql 联合索引生效的条件、索引失效的条件
对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
全栈程序员站长
2022/07/18
4.7K0
mysql 联合索引生效的条件、索引失效的条件
深入理解MySQL索引
当提到MySQL数据库的时候,我们的脑海里会想起几个关键字:索引、事务、数据库锁等等,索引是MySQL的灵魂,是平时进行查询时的利器,也是面试中的重中之重。
宜信技术学院
2020/03/18
8420
多个单列索引和联合索引的区别详解
背景: 为了提高数据库效率,建索引是家常便饭;那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下。
全栈程序员站长
2022/09/05
1.7K0
mysql建立联合索引_mysql之联合索引
create index `sindex` on `test` (`aaa`,`bbb`,`ccc`);
全栈程序员站长
2022/09/06
5.5K0
mysql性能优化(九) mysql慢查询分析、优化索引和配置
mysql性能优化(九) mysql慢查询分析、优化索引和配置
Java架构师必看
2021/06/11
1.6K0
mysql性能优化(九) mysql慢查询分析、优化索引和配置
索引使用策略及优化
原文: https://www.cnblogs.com/xpp142857/p/7373005.html http://blog.codinglabs.org/articles/theory-of-m
Leetcode名企之路
2018/10/25
6810
索引使用策略及优化
MySQL索引优化深入
CREATE TABLE `test` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `c1` varchar(10) DEFAULT NULL,   `c2` varchar(10) DEFAULT NULL,   `c3` varchar(10) DEFAULT NULL,   `c4` varchar(10) DEFAULT NULL,   `c5` varchar(10) DEFAULT NULL,   PRIMARY KEY (`id`),   KEY `idx_test_c1234` (`c1`,`c2`,`c3`,`c4`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
星哥玩云
2022/08/18
3080
MySQL索引优化深入
mysql的sql语句优化5种方式_MySQL数据库优化
本篇是MySQL知识体系总结系列的第二篇,该篇的主要内容是通过explain逐步分析sql,并通过修改sql语句与建立索引的方式对sql语句进行调优,也可以通过查看日志的方式,了解sql的执行情况,还介绍了MySQL数据库的行锁和表锁。
全栈程序员站长
2022/09/24
1.9K0
mysql的sql语句优化5种方式_MySQL数据库优化
如何避免回表查询?什么是索引覆盖? | 1分钟MySQL优化系列
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码
Java架构师必看
2021/10/22
2.6K0
如何避免回表查询?什么是索引覆盖? | 1分钟MySQL优化系列
mysql中联合索引abc 使用bac_mysql 联合索引
联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
全栈程序员站长
2022/09/01
2K0
MySQL秘籍之索引与查询优化实战指南
最左前缀原则。不冗余原则。最大选择性原则。所谓前缀索引,说白了就是对文本的前几个字符建立索引(具体是几个字符在建立索引时去指定),比如以产品名称的前 10 位来建索引,这样建立起来的索引更小,查询效率更快!
千寻简
2025/01/03
4500
MySQL秘籍之索引与查询优化实战指南
[MySQL] mysql索引的长度计算和联合索引
1.所有的索引字段,如果没有设置not null,则需要加一个字节。 2.定长字段,int占4个字节、date占3个字节、char(n)占n个字符。 3.变长字段,varchar(n),则有n个字符+两个字节。 4.不同的字符集,一个字符占用的字节数不同。latin1编码的,一个字符占用1个字节,gbk编码的,一个字符占用2个字节,utf8编码的,一个字符占用3个字节。 utf8mb4是一个字符占4个字节 5.使用explain语句查询到的key_len字段,可以适用于上面的计算规则,可以看到查询是否使用到了联合索引 6.mysql优化器会对条件中的 and的前后顺序根据多列索引顺序自动纠正过来
唯一Chat
2020/02/18
2.4K0
mysql联合索引的使用规则
大家好,又见面了,我是你们的朋友全栈君。 从一道有趣的题目开始分析: 假设某个表有一个联合索引(c1,c2,c3,c4)以下选项哪些字段使用了该索引: A where c1=x and c2=x a
全栈程序员站长
2022/09/05
1.6K0
19条MySQL优化,效率至少提高3倍
MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select id from t where num in(1,2,3) 对于连续的数值,能用between就不要用in了;再或者使用连接来替换。
Rookie
2019/03/04
5830
19条MySQL优化,效率至少提高3倍
mysql 联合索引 唯一_mysql 联合索引和唯一索引
如果表也有DML, 我一般只在a 上建索引. 这也是代价平衡的结果. 一方面 只在a 上建索引那么是
全栈程序员站长
2022/09/05
3.2K0
推荐阅读
相关推荐
mysql联合索引详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档