DBMS_STATS.SET_*_STATS过程。这些过程为优化器提供了用于指定统计信息的人为值。出于测试目的,您可以使用以下DBMS_STATS.SET_*_STATS过程为表,索引或系统手动创建人工统计信息。
如果stattab为null,则DBMS_STATS.SET_*_STATS过程将人工统计信息直接插入数据字典中。或者,您可以指定用户创建的表。
警告:
DBMS_STATS.SET_*_STATS过程仅用于开发测试。不要在生产数据库中使用它们。如果在数据字典中设置统计信息,则Oracle数据库会将设置的统计信息视为“真实”统计信息,这意味着,当统计信息收集作业不符合陈旧性标准时,它们可能不会重新收集人工统计信息。该DBMS_STATS.SET_*_STATS过程的典型用例是:
- 显示执行计划如何随着表中行数或块数的变化而变化
例如,
SET_TABLE_STATS可以将小型或空表中的行和块的数量设置为大量。当您使用更改的统计信息执行查询时,优化器可能会更改执行计划。例如,增加的行数可能导致优化器选择索引扫描而不是全表扫描。通过试验不同的值,您可以了解优化器如何随着时间的推移更改其执行计划。 - 为临时表创建真实的统计信息
您可能想查看在多个SQL语句中引用大型临时表时优化器的功能。您可以创建一个常规表,加载代表数据,然后用于
GET_TABLE_STATS检索统计信息。创建临时表后,您可以通过调用来“欺骗”优化器以使用这些统计信息SET_TABLE_STATS。
(可选)您可以为用户创建的表中的统计信息指定唯一的ID。该SET_*_STATS过程具有相应的GET_*_STATS过程。
表15-3 DBMS_STATS设置优化器统计信息的过程
| DBMS_STATS过程 | 描述 |
|---|---|
SET_TABLE_STATS | 使用的参数,例如设定表或分区统计numrows,numblks和avgrlen。如果数据库使用“内存中列”存储,则可以设置 优化器使用缓存的数据来估计用于索引或统计信息表访问的缓存块的数量。总成本是从磁盘读取数据块的I / O成本,从缓冲区高速缓存中读取缓存的块的CPU成本以及处理数据的CPU成本。 |
SET_COLUMN_STATS | 设置列统计使用的参数,如distcnt,density,nullcnt,等。在处理用户定义的统计信息的此过程的版本中,用于 |
SET_SYSTEM_STATS | 使用的参数,如设置系统的统计数据iotfrspeed,sreadtim和cpuspeed。 |
SET_INDEX_STATS | 设置使用参数,如指数统计numrows,numlblks,avglblk,clstfct,和indlevel。在处理用户定义的统计信息的此过程的版本中,用于 |
也可以看看:
Oracle Database PL / SQL软件包和类型参考,以了解有关DBMS_STATS.SET_TABLE_STATS设置优化器统计信息的更多信息和其他过程




