不论SQL中读取多少个表,在执行过程中,每次都是两个表/结
果集操作,得到新的结果后,再和下一个表/结果集操作,,,
直到结束。
在一个多表关联的执行计划中,必须包括这3要素:
* 表/对象/数据集的读取顺序( join order )。
* 数据的读取方法( access path )。
* 表/数据的关联方法(join method)。
这3个要素是判断执行计划优秀与否的关键。
* 可选择性(Selectivity) ,>=0 and <=1。
* 预估记录数(Cardinality) ,表/视图/操作后的结果集。
* 开销(Cost) ,CBO选择最佳执行计划的标准:越低越好。
filter是指根据某个条件来过滤数据。
而access根据某个条件或者关系来访问数据。 (这个我平时还真没有注意)
关联条件和过滤条件都是约束条件。
10046事件为何有时没有执行计划?
这是因为该语句在执行后,该语句的游标没有关闭,导致没写入执行
计划,可以在执行完该语句后,执行一简单语句,如:select * from dual;
促使之前的游标结束,即可得到执行计划信息。