关于查询表数据,列与CPU开销的计算

在性能优化艺术一书中看到:

Joze Senegacnik指出,从Oracle 10gR2开始,可以通过如下这个公式计算出访问一个列的CPU开销。

cpu_cost = column_position * 20
公式:估算访问一个列的CPU开销跟这个列在表中的位置有关。这个公式给出了访问一行所用的开销。如果访问多行数据,CPU开销按比例增加(为什么会增加,后续再研究~)。

下面一个实验证明一下:

创建一张表t1,插入一行记录,运行explain plan得到执行计划,获取依次取出第一列到第九列的CPU开销。

SQL> create table t1 (
  2  c1 number,
  3  c2 number,
  4  c3 number,
  5  c4 number,
  6  c5 number,
  7  c6 number,
  8  c7 number,
  9  c8 number,
 10  c9 number);
Table created.
SQL> insert into t1 values (1,2,3,4,5,6,7,8,9);
1 row created.
SQL> explain plan set statement_id 'c1' for select c1 from t1;
SQL> explain plan set statement_id 'c2' for select c2 from t1;
SQL> explain plan set statement_id 'c3' for select c3 from t1;
SQL> explain plan set statement_id 'c4' for select c4 from t1;
SQL> explain plan set statement_id 'c5' for select c5 from t1;
SQL> explain plan set statement_id 'c6' for select c6 from t1;
SQL> explain plan set statement_id 'c7' for select c7 from t1;
SQL> explain plan set statement_id 'c8' for select c8 from t1;
SQL> explain plan set statement_id 'c9' for select c9 from t1;
SQL> select statement_id,cpu_cost as total_cpu_cost,
  2  cpu_cost-lag(cpu_cost) over (order by statement_id) as cpu_cost_1_coll,
  3  io_cost
  4  from plan_table
  5  where id=0
  6  order by statement_id;
STATEMENT_ID                   TOTAL_CPU_COST CPU_COST_1_COLL    IO_COST
------------------------------ -------------- --------------- ----------
c1                                      35757                          3
c2                                      35777              20          3
c3                                      35797              20          3
c4                                      35817              20          3
c5                                      35837              20          3
c6                                      35857              20          3
c7                                      35877              20          3
c8                                      35897              20          3
c9                                      35917              20          3
9 rows selected.

请注意,初始读取表数据的CPU开销是35757,每往后面一列,CPU开销加20。同时I/O开销不变,这是因为所有列的数据基本存储在同一个数据块,全部查询的物理读的次数是一样的。

摘录、参考于Oracle性能诊断艺术

Ligle WANG

2011-11-10

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25834554/viewspace-710781/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25834554/viewspace-710781/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值