如何尽可能避免索引失效?
一条dml(最重要的还是查询sql),要经过编译(形成关系代数表达式)-》逻辑优化(比如多表连接 尽可能将选择操作 投影操作提前)-》物理优化(为每一个基本的关系代数操作选择例行程序)-》交给执行引擎 执行。
索引失效就是DBMS发现全表扫描的效率更高,那么显然不走索引了。
in 可能会导致索引失效like可能会导致索引失效< > != not in not like 等反向查询 可能会导致索引失效索引列使用 is null is not null 肯能会使索引失效like “%gao%” 一定会导致索引失效索引列参与运算 肯定会使索引失效 where user.id - 1 = 5索引列的显式调用函数 或者隐式类型转化,肯定会导致索引失效where 中索引列不符合最左匹配原则一定会失效。
索引设置的原则
区分度高 比如对性别设置索引 就可能导致全表扫描不是频繁更新经常查询的字段