ops$tkyte@ORA920> select * from t where object_id = 55;
Execution Plan
———————————————————-
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=13 Bytes=96)
1 0 TABLE ACCESS (BY INDEX ROWID) OF ‘T’ (Cost=3 Card=13 Bytes=96)
2 1 INDEX (RANGE SCAN) OF ‘T_IDX’ (NON-UNIQUE) (Cost=13 Card=1)
Statistics
———————————————————-
0 recursive calls
0 db block gets
11 consistent gets
82 physical reads
54 redo size
209 bytes sent via SQL*Net to client
275 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
其中的card是row的意思。
但如果比如上面的sql语句,只能有一行返回,card却等于了一个不是1的数字,这就有问题了。这是因为:
如果rows processed(确切的返回的行的数目),与card的数目相差的很远的情况下,可能的原因是:统计数据不足,这个时候需要建立histogram
当然这也反映了,autotrace的card是估计的。而trace sql通过tkprof看到的是真实的情况。
