Rows在解释计划中表示什么?

时间:2011-04-19 06:43:10

标签: oracle

这是我的疑问:

SELECT payload_data FROM staging_record WHERE record_source = 11;

这是执行计划:

------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                  |  9016 |  1875K|   292   (1)| 00:00:05 |
|   1 |  TABLE ACCESS BY INDEX ROWID| STAGING_RECORD   |  9016 |  1875K|   292   (1)| 00:00:05 |
|*  2 |   INDEX RANGE SCAN          | IX_RECORD_SOURCE |  9016 |       |    15   (0)| 00:00:01 |
------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("RECORD_SOURCE"=11)

我做了一次计数,并使用此查询返回22619

SELECT COUNT(*) FROM staging_record WHERE record_source = 11;

当我的点数返回22619时,为什么Rows列说9016. Rows在这里引用了什么?

2 个答案:

答案 0 :(得分:3)

9016的数字是优化程序的估计值,基于它的统计数据。如果表有901,600行并且record_source有100个不同的值,则优化器可能会估计record_source的典型查询将返回901,600 / 100 = 9016行。实际数据的偏差可能会使其变得无法实现(它永远不会是完美的)。如果数据非常偏斜,则可以使用直方图进一步细化统计数据。

答案 1 :(得分:1)

你的指标已经过时了。刷新统计信息(使用DBMS_STATS),您将获得更准确的价值。

Rows是指在查询执行期间受影响的行数(根据指标信息的近似值)。

相关问题