我有SQL command
很多JOIN
和UNION
声明。
我打开了Explain Plan Window
,但我不知道是什么Cost
,Cardinality
或者是什么Bytes
意思。
有人可以解释这些条款吗?更低是否一定意味着更快的query
时间?
我有SQL command
很多JOIN
和UNION
声明。
我打开了Explain Plan Window
,但我不知道是什么Cost
,Cardinality
或者是什么Bytes
意思。
有人可以解释这些条款吗?更低是否一定意味着更快的query
时间?
正如我在oracle 文档中看到的那样
CARDINALITY:通过基于成本的方法估计操作访问的行数。
BYTES:通过基于成本的方法估计操作访问的字节数。
COST:优化器基于成本的方法估计的操作成本。对于使用基于规则的方法的语句,此列为空。未确定表访问操作的成本。此列的值没有任何特定的计量单位;它只是一个用于比较执行计划成本的加权值。此列的值是 CPU_COST 和 IO_COST 列的函数。
所以,你还需要知道:
*CPU_COST:* 优化器基于成本的方法估计的操作的 CPU 成本。对于使用基于规则的方法的语句,此列为空。此列的值与操作所需的机器周期数成正比。
*IO_COST:* 优化器基于成本的方法估计的操作的 I/O 成本。对于使用基于规则的方法的语句,此列为空。该列的值与操作读取的数据块数成正比。
您需要知道,Explain Plan 为您提供了数据库认为它将使用的计划,但实际使用的计划可能会有所不同。
如果您要优化查询,或将其与其他查询进行基准测试(以选择最佳查询),测量执行时间、等待、重做大小和逻辑 I/O 是不错的起点。我不会过分依赖解释计划。
看一下:
http://www.orafaq.com/wiki/SQL_Trace
和: