什么,mysql组合索引不满足最左原则也走索引?

本文探讨了MySQL组合索引不完全遵循最左原则的情况,即在某些条件下,不满足最左原则的查询仍能使用组合索引。同时,文章介绍了MySQL主从复制的重要性、原理和配置步骤,强调了主从复制在应对高并发和数据备份中的作用。
摘要由CSDN通过智能技术生成

起因

某天,有位同事正在研究mysql组合索引,我们都知道mysql组合索引满足最左原则,假设建立了(a,b,c)组合索引,当单独使用b、c是不走索引的,可同事测试后发现不满足也可以走索引,有图有真相,纳尼, 这波跟我的mysql企业级理解不一致阿,必须建个表测试一番

新建测试表

CREATE TABLE test_index (
	id int auto_increment NOT NULL,
	a varchar(10) NULL,
	b varchar(10) NULL,
	c varchar(10) NULL,
	CONSTRAINT test_pk PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci;
CREATE INDEX test_a_IDX USING BTREE ON test_index (a,b,c);

insert into test_index (a, b, c)
values 
(1,1,1),
(2,2,2),
(3,3,3),
(4,4,4),
(5,5,5);

测试sql

explain select * from test_index ti where b = '2'
复制代码

哦豁,看执行计划是使用了索引,不会吧不会吧,怎么回事?

正当我百思不得其解时,再看了一下执行计划,发现了一丝线索 

原来是走了覆盖索引,但是查询的时候还是进行了全表扫描,我们可以看到rows=5以及Extra里的Using where,只不过select * 查询的字段恰好能从组合索引(覆盖索引)中取到,优化器会使用该索引,避免去回表查询

总结

组合索引优点

  1. 减少空间开销

    分析业务sql的常用的字段条件,尽量建立组合索引,减少单个索引的建立,索引过多往往会降低写操作的性能,和增加磁盘空间的开销

  2. 覆盖索引

    当优化器分析到select的字段能够在覆盖索引中查询到,便会直接从覆盖索引中获取数据,不做回表操作,减少了很多随机的IO操作,覆盖索引是主要的提升性能的优化手段之一

  3. 效率高

    多个条件的查询,假如只建立一个个单列索引,查询的效率并不高࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值