项目中不要用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`) ;
执行同样的语句

是不是很坑!
但是第二次增加索引的动作有什么错呢?

本文讨论了在数据库项目中避免使用forceindex的重要性,特别是在长期运行的项目中。forceindex可能导致意料之外的行为,如当新增索引时,原有的查询计划可能不再适用。举例说明了一个创建和插入数据的过程,以及forceindex在不同索引存在时如何影响查询。作者提醒开发者注意索引管理和查询优化,以防止潜在的性能问题。

被折叠的 条评论
为什么被折叠?



