- — 全值匹配我最爱,最佳左前缀法则;
- — 带头大哥不能死,中间兄弟不能断;
- — 索引列上少计算,范围之后全失效;
- — LIKE百分写最右(类型转换也失效),覆盖索引不写*;
- — 不等空值还有OR,索引影响要注意;
- — VAR引号不可丢, SQL优化有诀窍
- 全值匹配我最爱
name
,age
,sjh
name:63 复合索引情况下,如果能用到复合索引的全部值就最好 - 最佳左前缀法则 复合索引的主索引字段推荐写在最左边
- 带头大哥不能死,中间兄弟不能断(可以乱)
- 索引列上少计算 不要在索引列上参与任何计算【隐式类型转换】
- 范围之后全失效 复合索引时候,范围之后 NOT IN NOT EXIST <> != 全部失效
- 1.1. 一般性建议
- 提高 order by 的效率
- GROUP BY关键字优化
- 查询索引,覆盖索引优化
— 全值匹配我最爱,最佳左前缀法则;
— 带头大哥不能死,中间兄弟不能断;
— 索引列上少计算,范围之后全失效;
— LIKE百分写最右(类型转换也失效),覆盖索引不写*;
— 不等空值还有OR,索引影响要注意;
— VAR引号不可丢, SQL优化有诀窍
全值匹配我最爱 name
, age
, sjh
name:63 复合索引情况下,如果能用到复合索引的全部值就最好
最佳左前缀法则 复合索引的主索引字段推荐写在最左边
带头大哥不能死,中间兄弟不能断(可以乱)
索引列上少计算 不要在索引列上参与任何计算【隐式类型转换】
EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE id+1= 4
范围之后全失效 复合索引时候,范围之后 NOT IN NOT EXIST <> != 全部失效
EXPLAIN SELECT SQL_NO_CACHE * FROM t_emp WHERE name=’洪七公’ AND age>10 AND sjh=’444444’
尽量使用覆盖索引
只访问索引的查询(索引列和查询列一致)),减少select *
1.1. 一般性建议
对于单键索引,尽量选择过滤性更好的索引(例如:手机号,邮件,身份证)
在选择组合索引的时候,过滤性最好的字段在索引字段顺序中,位置越靠前越好。
选择组合索引时,尽量包含where中更多字段的索引
组合索引出现范围查询时,尽量把这个字段放在索引次序的最后面
尽量避免造成索引失效的情况
提高 order by 的效率
1,只查询需要的字段 能不selec就不select
2.尝试提高 sort_buffer_size
3. 尝试提高 max_length_for_sort_data
GROUP BY关键字优化
group by 使用索引的原则几乎跟order by一致 ,唯一区别:
l group by 先排序再分组,遵照索引建的最佳左前缀法则
l 当无法使用索引列,增大max_length_for_sort_data和sort_buffer_size参数的设置
l where高于having,能写在where限定的条件就不要写在having中了
l group by没有过滤条件,也可以用上索引。Order By 必须有过滤条件才能使用上索引。
查询索引,覆盖索引优化
禁止使用select *
禁止查询与业务无关字段
尽量使用覆盖索引