请教PL/SQL Developer执行计划中Cost、Cardinality和Bytes的含义
聊聊Oracle执行计划里的Cost、Cardinality和Bytes
嘿,刚好对这个熟,给你逐个拆解这三个核心指标——它们都是Oracle优化器用来判断查询执行效率的关键依据:
Cost(成本值)
这是优化器估算的相对资源消耗值,注意是「相对」的,不是实际的CPU时间、IO次数这种绝对数值。它的作用是帮优化器对比不同执行路径的开销,比如全表扫描和索引扫描哪个更划算,优化器会优先选Cost更低的方案。像你执行的select * from customers全表扫描,这里的Cost就是Oracle估算扫描整张表需要消耗的相对资源量。
Cardinality(基数)
简单说就是优化器预估的某个执行步骤会返回的行数。比如你的全表查询,Cardinality就是Oracle认为customers表大概有多少行数据(这个数值的准确性依赖于表的统计信息是否及时更新,如果统计信息过时,预估行数可能和实际差很多)。基数是优化器计算Cost和Bytes的基础,行数估错了,后续的成本估算也会跟着跑偏。
Bytes(字节数)
这是优化器预估的该执行步骤返回结果的总字节大小。比如你查*,就是把每行所有列的字节数加起来,再乘以预估的基数(行数)得到的数值。它主要用来评估内存、IO的负载,比如结果太大的话,Oracle可能需要用到临时表空间来处理数据。
举你这个例子来说:select * from customers的执行计划里,Cost是全表扫描的相对资源开销,Cardinality是预估的表总行数,Bytes是所有行所有列的总数据量估算值。
内容的提问来源于stack exchange,提问作者M.Minbashi
相关产品推荐
相关产品推荐

