这是我的疑问:
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
在这里引用了什么?
答案 0 :(得分:3)
9016的数字是优化程序的估计值,基于它的统计数据。如果表有901,600行并且record_source有100个不同的值,则优化器可能会估计record_source的典型查询将返回901,600 / 100 = 9016行。实际数据的偏差可能会使其变得无法实现(它永远不会是完美的)。如果数据非常偏斜,则可以使用直方图进一步细化统计数据。
答案 1 :(得分:1)
你的指标已经过时了。刷新统计信息(使用DBMS_STATS
),您将获得更准确的价值。
Rows
是指在查询执行期间受影响的行数(根据指标信息的近似值)。