记一次 mysql force index 引来的大坑

项目中不要用force index!
项目中不要用force index!
项目中不要用force index!
特别是历经几年的老项目。
首先说下结论,force index 策略先精确匹配,如果匹配不到,可以模糊匹配,前提是只存在一个模糊匹配的结果。例如

CREATE TABLE `masterbasic1`.`student`  (
  `code` varchar(20) NOT NULL,
  `name` varchar(40) NULL,
  `sub_code` varchar(30) NULL,
  `class` varchar(10) NULL
);
ALTER TABLE `masterbasic1`.`student` 
INSERT INTO `masterbasic1`.`student`(`code`, `name`, `sub_code`, `class`) VALUES ('c01', 'n01', 'c01_01', 'c1');
INSERT INTO `masterbasic1`.`student`(`code`, `name`, `sub_code`, `class`) VALUES ('c02', 'n02', 'c02_01', 'c1');
INSERT INTO `masterbasic1`.`student`(`code`, `name`, `sub_code`, `class`) VALUES ('c03', 'n03', 'c03_01', 'c1');
INSERT INTO `masterbasic1`.`student`(`code`, `name`, `sub_code`, `class`) VALUES ('c04', 'n04', 'c04_01', 'c1');
ADD INDEX `idx_code_class`(`code`, `class`) USING BTREE;

此时索引只有idx_code_class
在这里插入图片描述
使用强制索引
select * from student force index (idx_code)
在这里插入图片描述
正常运行,增加索引idx_code_subCode

ALTER TABLE `masterbasic1`.`student` 
ADD INDEX `idx_code_subCode`(`code`, `sub_code`) ;

执行同样的语句
在这里插入图片描述
是不是很坑!
但是第二次增加索引的动作有什么错呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值