MySQL优化理解

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连接次数

 

 

posted @ 2019-09-24 22:30  Jemb  阅读(179)  评论(0编辑  收藏  举报