索引失效常见情况#
- 使用左或者左右模糊匹配
select * from t_user where name like “%xx”
- 对索引使用函数
select * from t_user where length(name) = 6;
- 索引进行表达式计算
select * from t_user where id + 1 = 10;
- 对索引隐式类型转换
phone 为字符串类型
select * from t_user where phone = 130001;
- 联合索引非最左匹配
联合索引(a,b,c)
当where b=2,where c=3,或where b=2 and c = 3的情况下索引会失效。特殊情况 where a=1 and c = 3; 的情况根据mysql版本不同会有索引下推。
- 如果where 前置条件为索引列而后置条件不是的情况下,会导致索引失效。
设计模式理解#
- 单一职责原则
一个类只承担一个职责。
- 里氏替换原则
子类可以拓展父类实现,但是不能改变父类功能,很多框架的接口都是通过继承父类实现的。
- 依赖导致原则
面向接口编程,而不是面向实现编程。依赖接口而不是依赖具体实现。
- 接口隔离原则
将接口拆分成更小的和更具体的接口,让接口中只包含客户端感兴趣的方法。
- 迪米特法则,最少知识原则
一个类应该对自己需要耦合或者调用的类知道的最少。一个类只需要关注与自己相关的耦合类参数或者方法。
- 开闭原则
对拓展开放,对修改关闭。例如: usb,手机主题