MySQL索引优化系列:(二)索引全用及最左法则

第一篇MySQL索引优化系列:(一)索引的类型里面有说过复合索引是什么,也就是对表上的多个列进行索引复合索引全用的意思就是对于建立的复合索引中包含了几个字段,查询的时候最好能全部用到,而且严格按照索引顺序,这样查询效率是最高的。当然实际使用中要按照具体情况来分析,以上只是说一个理想状况。

下面来实际操作一下:

SQL脚本:

CREATE TABLE people (

Id int(11) NOT NULL AUTO_INCREMENT,

name varchar(10) DEFAULT NULL,

age int(11) DEFAULT NULL,

sex char(4) DEFAULT NULL,

class varchar(10) DEFAULT NULL,

birthday date DEFAULT NULL,

PRIMARY KEY (Id),

KEY idx_name_age_sex_class (name,age,sex,class) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=1026 DEFAULT CHARSET=utf8;

然后插入了1024条

INSERT INTO test.people (name, age, sex, class, birthday) VALUES (‘张三’, ‘17’, ‘男’, ‘1’, ‘2021-03-02’);

和1条

INSERT INTO test.people ( name, age, sex, class, birthday) VALUES (‘李四’, ‘25’, ‘女’, ‘2’, ‘2021-02-24’);

不同的查询条件对比:

EXPLAIN SELECT * from people where name=“李四”

在这里插入图片描述

=>查询时间:0.027s key_len :33

EXPLAIN SELECT * from people where name=“李四” and age=“25”

在这里插入图片描述

=>查询时间:0.026s key_len :38

EXPLAIN SELECT * from people where name=“李四” and age=“25” and sex=“女”

在这里插入图片描述

=>查询时间:0.024s key_len :51

EXPLAIN SELECT * from people where name=“李四” and age=“25” and sex=“女” and class=“2”

在这里插入图片描述

=>查询时间:0.023s key_len :84

最左前缀法则

=========================================================================

最左前缀也跟复合索引有关,索引的顺序要按照建立时的顺序来进行索引,不然就不会使用创立的复合索引。就是从左到右的顺序来写sqlu、语句。

还是以上面的例子来说:

EXPLAIN SELECT * from people where name=“李四” and age=“25” and sex=“女” and class=“2”

假如我们改成以下的方式来查询,来看下还会不会使用创造的复合索引

EXPLAIN SELECT * from people where age=“25” and sex=“女” and class=“2”

EXPLAIN SELECT * from people where sex=“女”

EXPLAIN SELECT * from people where class=“2” and name=“张三” and class=“1”

EXPLAIN SELECT * from people where name=“张三” and sex=“女” and class=“2”

EXPLAIN SELECT * from people where class=“2” and name=“张三” and sex=“女”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值