1、执行计划
1)、什么是执行计划:
SQL 语句编写过程:select xx,tr, from ... where ... order by ...
SQL 语句执行过程:
先从from字句一个表或多个表创建工作表;
将where条件应用于A的工作表,保留满足条件的行;
GroupBy 将B的结果分成多个组;
Having 将条件应用于C组合的条件过滤,只保留符合要求的组;
Order By对结果进行排序;
2)、执行计划能干什么
在性能测试中或数据库的应用中,我们评估SQL语句的性能,诊断问题;
3)、如何看懂执行计划
a)、看懂SQL语句的执行顺序;
"最右最上"原则执行。
b)、看懂数据库表的访问方式
Index unique Scan: 在主键索引或者unique索引上会出现
Index range Scan: 索引上有> ,<,between ..and
Index full Scan: 10I,11I 12C ,CBO
Index fast full Scan: 不对查询出来的结果进行排序;
Index skip Scan: 组合索引的第一列没有被使用到;
全表扫描:没有索引(索引失效) ------------ > 在提示我们,可以需要一些性能优化了;
c)、看懂数据库表和表之间的连接方式:
归并排序:
嵌套循环:
哈希连接:
笛卡尔积:
总结:
上面这些内容属于Oracle内部的,我们在外部没法直接干预;
我们能做的是:
涉及到表连接的时候:in、exist,on 、where 用对SQL;
涉及到表内部的访问方式:有没索引、有没有误用造成索引失效;
子查询(where连接)如果发现有性能问题,我们可以用join on 来试试;
有提升的当然更好,没有提升呢,我们也尽力,从其他层面考虑问题。
索引是优化性能的有效手段,但不是说,全表扫描一定比索引慢,Oracle自身的计算结果选一个他认为最好的;
性能测试定性不定量:性能测试是和一定的数据量和硬件联系在一起的。