联合索引最长匹配规则

最左匹配原则
只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。

-- 创建测试表
CREATE TABLE `student_0506` (
  `id` int(11) NOT NULL,
  `name` varchar(10) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name_age` (`name`,`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

-- 插入测试数据
DROP PROCEDURE pro_0506;
CREATE PROCEDURE pro_0506()
BEGIN
    DECLARE i INT;
    DECLARE char_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    DECLARE return_str varchar(255) DEFAULT '';
    DECLARE age INT;
    SET i = 1;
    WHILE i <= 10000 
        do
        SET return_str = substring(char_str, FLOOR(1 + RAND()*62), 8);
        SET i = i+1;
        SET age = FLOOR(RAND() * 100);
        INSERT INTO student_0506(id, name, age) values(i, return_str, age);
    END WHILE;
END;
CALL pro_0506();

表 student_0506 在列 name 和 Age 上建立了联合索引,name列为最左所在列,使用存储过程插入了10000条数据

查询1 (遵循了最左匹配规则):

 

 查询2(遵循了最左匹配规则):

 

 查询3(违背了最左匹配规则):

 

 修改 表联合索引最左列为 age

alter table student_0506 drop index idx_name_age;
alter table student_0506 add index idx_age_name(age,name);

再执行查询:

 

 

 

 

 

 

 

 

posted @ 2022-05-06 22:49  温故纳新  阅读(54)  评论(0编辑  收藏  举报