优化思路:
1、优化更需要优化的SQL:优先优化低消耗高并发的SQL,因为低消耗高并发远比高消耗低并发影响要大。
2、定位优化对象的性能瓶颈:IO,CPU,网络带宽。
3、明确优化的目标:以良好的户体验为目的。
4、从explain执行计划入手。
5、小结果集驱动大结果集。
6、尽可能在索引当中完成排序,
6.1、order by 子句中只要是索引的前导列都可以都可以使索引生效,可以直接在索引中排序,不需要额外的内存或文件排序。
6.2、不能利用索引避免额外排序的情况:例如排序字段有多个索引,排序顺序和索引键顺序不一致(非前导列)。
7、不要使用select *
8、仅使用最有效的过滤条件。
9、尽可能避免复杂的join和子查询。
10、小心使用order by group by distinct。
11、合理设计并利用索引。
那些情况可能会导致全表扫描:
1、没有合适的索引
2、条件列上使用了运算符
3、使用函数(显示转换)
4、条件列上发生了隐式转换
5、条件所对应的列不在组合索引的第一位
6、条件列上使用了is Null或is not Null
7、使用了左模糊查询或双边模糊查询
8、使用不等关联
9、条件列对应的索引选择度不高
10、表很小
11、使用并行
12、使用HINT提示全表扫描
13、or使用不当
14、取得数据量占比比较大
15、索引碎片太严重
如何建立索引
1、单列索引(选择性)
2、组合索引(将最常用的列作为前导列,唯一性多,范围查询的字段尽量放在前面,组合索引字段不宜过多,不要使索引冗余,尽可能少的建立索引,更多的被使用,组合索引下where后面的条件先后不影响。
3、外键一定要建立索引
4、如果对某列有函数操作可以考虑建立函数索引
5、nvarchar2和varchar2隐式转换,走全表扫描,但问题比较难发现。