Sql优化思路

SQL优化

一.单表访问

单表访问通常就是走全表扫描或者是走索引 1.若是 SQL查询 返回表中大量数据,通常是走全表扫描 2.若是 SQL查询 返回表中少许数据,通常走索引sql

二.多表访问

1.两表关联 两表关联方式有,嵌套循环,hash,排序合并链接markdown

1.1.NL嵌套循环,通常用于两表关联,返回少许数据函数

1.2.HASH,通常用于处理多表关联,返回大量数据性能

1.3.排序合并链接,通常用于处理两表,非等值链接 根据这些理论,我会先看两个表关联返回多少行数据,返回少走NL,返回多走HASH优化

2.多表关联,原理同样spa

三.SQL写法规范

1.sql避免带有标量子查询code

2.sql避免带有自定义函数orm

3.UPDATE后面须要跟子查询排序

4.注意执行计划是否走了Filter,笛卡尔积等索引

5.注意执行计划 ,表是否是缺索引分区表有没有作分区裁剪

6.表的统计信息是否过时,有没有收集

四.业务场景

1.分析业务逻辑 你所在业务SQL属于ETL,仍是属于报表的 ETL,SQL通常走hash居多,由于处理数据量大 BI,SQL通常走嵌套循环居多,由于返回的结果集小

五.SQL写法

1.SQL里面不能有标量子查询,缘由后续补充

2.SQL里面不能有自定义函数,缘由后续补充

3.大表join大表容易产生性能问题

4.FROM后面视图和子查询,单独查询快不快,单独查询慢,须要要单独优化

5.WHERE 条件要注意 会不会产生 filter(表示谓词条件只会起到过滤做用,不会影响数据的访问路径),隐式转换致使不走索引 在查看Oracle执行计划的时候常常会遇到Access和filter Access:表示对应的谓词条件会影响数据的访问路径(是按照索引仍是表) Filter:表示谓词条件只会起到过滤做用,不会影响数据的访问路径。

6.看表统计信息收集,过时没

7.看表有没有时间过滤字段,有没有对时间过滤字段建分区

8.分析执行计划 ,嵌套循环的驱动表,E-Rows(预估的返回记录数),A-Rows(真实返回的记录数)条目是否正常,大表是否走索引等等

案例后续补充

相关文章
相关标签/搜索