2.2mysql 索引优化
5.索引优化
5.1索引分析 5.1.1单表
5.1.2两表
5.1.3三表
5.2索引失效(应该避免) 5.2.1 建表SQL
5.2.2 案例(索引失效) 5.2.2.1 全值匹配我最爱
5.2.2.2 最佳左前缀法则* ==如果索引了多列,要遵守最左前缀法则。指的是查询从索引的嘴左前列开始并且不跳过索引中的列 带头大哥不能死
5.2.2.3 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
5.2.2.4 存储引擎不能使用索引中范围条件右边的列
5.2.2.5 尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select*
5.2.2.6 mysql在使用不等于(!=或者<>) 的时候无法使用索引会导致全表扫描
5.2.2.7 is null,is not null 也无法使用索引
5.2.2.8 like以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作
*问题:解决like‘%字符串%’时索引不被使用的方法??
覆盖索引解决问题 注意:创建的索引字段 假如只有两个 ,用这两个字段去查询 ***例如: index (a,b) select a,b from A select a,b,c from A 索引会失效 因为多了没建索引的字段 5.2.2.9 字符串不加单引号索引失效
5.2.2.10 少于or,用它来连接时会索引失效
5.2.2.11 小总结
5.2.3 面试题讲解
a.题目
b.定值、范围还是排序,一般order by是给个范围
c.group by基本上都需要进行排序,会有临时表产生
5.3一般性建议 5.3.1 对于单键索引,尽量选择针对当前query过滤性更好的索引 5.3.2 在选择组合索引的时候,当前Query中过滤性最好的字段在索引字段顺序中,位置越靠前越好 5.3.3 在选择组合索引的时候,尽量选择可以能够包含当前query中的where子句中更多字段的索引 5.3.4 尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的
全值匹配我最爱,最左前缀要遵守
带头大哥不能死,中间兄弟不能断
索引列上少计算,范围之后全失效
LIKE百分写最右,覆盖索引不写星
不等空值还有or,索引失效要少用
VAR引号不可丢,SQL高级也不难
作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。