1)基本写法优化
- 少使用
select *
,尽量使用具体字段; - 对于条件来说等号之类两边的字段类型要一致,字符串不加单引号索引会失效;
- 对于条件来说后面少使用函数或者算数运算;
- 对于
group by
语句要先过滤后分组; - 在查询时减少使用
null
,所有字段需添加默认值; - 少使用
like
,对于需要使用的, 如需要使用尽量用like abc%
这种,不要把%放字段前面; - 去除的
distinct
过滤字段要少,避免distinct *
; - 不要超过 5 个以上的表连接;
2)建立使用合适索引
- 对于高频筛选字段可以适当的建立索引;
- 一个表的索引最好不要超过5个,多了会影响插入修改速度;
- 对于需要多个字段进行排序的可以使用组合索引;
- 使用组合索引一定要遵守最左原则;
- 不要对值是有限重复的字段建立索引,如性别等;
- 使用
explain
查看SQL
是否命中索引;
3)替代优化
- 对于
exists
和in
需遵守小表驱动大表,exists
需要外表小,in
则需要内表小; - 不要使用
not in
和<>
,这个会破坏索引,not in
可以用not exists
来代替,<>
可以分成两个条件>
或者<
等; - 使用连接查询代替子查询;
4) 特殊优化
- 强制索引
force index(<索引名>)
MySQL 可能会选择错索引,我们可以通过force index
进行矫正
例句:
select * from order_info force index(idx_period) where period = 202208 order by modified desc limit 0, 10;
标签:index,force,exists,SQL,索引,使用,优化
From: https://www.cnblogs.com/revil/p/16721068.html