1.索引列的值设置为null,可以用空字符串代替,为null会导致不走索引
2.遵循最佳左前缀原则,因为MySQL的B+树索引结构根据最左的column进行创建的,
3.不要对索引列进行函数或表达式的计算,正确做法是将值计算好再传进来
4.避免全表扫描 Where 中少用 NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE,它们会引起全表扫描。
5.用 Where 子句替代 having 子句 避免使用 having 子句,having 只会在检索出所有记录之后才对结果集进行过滤。
6.or只有两边都有索引才走索引,如果都没有,或者只有一个是不走索引的,可以使用union 代替
7.exists 代替 in Oracle 中 In 子查询返回的结果不能超过 1000 条,使用 exists 为替代方案。
8. 优先使用 UNION ALL (不去重),union(去重),union使用到额临时表
9.范围查询使用 between
10.查询时必须使用正确的类型,用不正确的类型可能导致不走索引
11.order by 如果根据多个值进行排序,排序方式必须保持一致
12.将能过滤掉最多数据,索引不会失效,的过滤条件写在前面
13.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
14.2000条以内的记录不建议做索引
15.如果查询不走索引,可以通过 force index(column) 强制走索引
其他优化tip:
避免select *
小结果驱动大结果
不使用外键关联
大sql可以拆分成小SQL
减少IO连接次数