项目中不要用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`) ;
执行同样的语句
是不是很坑!
但是第二次增加索引的动作有什么错呢?