建表时优化
-
合理的设计表结构
-
列的长度尽可能的短。列短则索引空间的利用率更高,索引树层级更低,查询更快。
-
在业务允许的情况下使用数字替代字符串,字符串是按字符比较,数字是整体比对。
-
适当冗余,以空间换时间,减少连表查询
-
使用Not null,当null占比较高时is not null查询会导致索引失效。
索引优化
-
为在合适的列建索引。
-
避免使用表达式。
-
注意隐式类型转化,它本质也是使用表达式的一种。
-
小心使用模糊查询和联合索引。
-
使用覆盖索引。
-
定期清理索引碎片,B+树采用的页分类和页合并机制,可能有一部分索引空间是空的。不过现在业务上大部分使用的是伪删除,这部分可优化空间不大。
查询语句优化
-
参数化SQL,既能利于优化器提高性能,又能防止SQL注入。
-
减少查询的行,可以进行分页
-
减少查询的列,可以充分利用覆盖索引
-
根据场景使用子查询还是in查询
-
使用Union All而不是Union。使用Union必然存在一次去重,如果我们能断言不要去重那就没必要执行这个过程。