有mysql联合索引(A, B, C),那么AC查询会用到索引吗?

您所在的位置:网站首页 sql索引有什么用吗 有mysql联合索引(A, B, C),那么AC查询会用到索引吗?

有mysql联合索引(A, B, C),那么AC查询会用到索引吗?

2024-07-13 00:38| 来源: 网络整理| 查看: 265

  提到联合索引的使用规则,一般我们都会想到左匹配原则,为什么是左不是右呢?这是因为即使是联合索引在innodb底层也是使用b+树来存放的,各个节点排序的规则就是按照联合索引中多个字段从左往右依次排序的,所以查询的时候需要左匹配才能保证b+树中的数据是有序的,才能查询;如果单独查询最右侧字段,那么其在b+索引树里面是完全无序的,自然也就无法查询。

  那么有这样一个问题,架设联合索引idx_a_b_c(a, b, c),其中针对a和c两个字段进行查询是否能够使用索引呢?大家可以先暂停,自己思考一下~

  

  相信大家经过思考已经有了自己的答案,那么我们一起去探索求证一下吧。  

  我这里使用的mysql版本为5.7.25

  首先,我们创建一张表:将字段a,b,c设置为联合索引。

create table `my_index_test` ( `id` int(11) unsigned not null auto_increment comment '主键id', `column_a` int(11) unsigned not null default 0 comment '字段a', `column_b` int(11) unsigned not null default 0 comment '字段b', `column_c` int(11) unsigned not null default 0 comment '字段c', `column_d` int(11) unsigned not null default 0 comment '字段d', primary key (`id`), key `idx_a_b_c` (`column_a`, `column_b`, `column_c`) ) ENGINE=InnoDB comment="联合索引测试";

  我们再插入一些测试数据

DELIMITER // CREATE PROCEDURE batch_insert() BEGIN DECLARE i INT DEFAULT 1; WHILE i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3