创建实验表,插入10万行数据

SQL> create table test (id number,name varchar2(10));

Table created.

SQL> declare
begin
for i in 1..100000 loop
insert into test values(1,'a');
commit;
end loop;
end;
/

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

查看表的统计信息,统计信息为空

SQL> select table_name ,num_rows,blocks,avg_row_len from user_tables where table_name='TEST';

TABLE_NAME NUM_ROWS BLOCKS AVG_ROW_LEN

------------------------------ ---------- ---------- -----------
TEST

收集表的统计信息

SQL> exec dbms_stats.gather_table_stats('SCOTT','TEST');

PL/SQL procedure successfully completed.

SQL> select table_name,num_rows,blocks,avg_row_len from user_tables where table_name='TEST';

TABLE_NAME      NUM_ROWS BLOCKS AVG_ROW_LEN
------------------------------ ---------- ---------- -----------
TEST          100000   244    5

查看全表扫描的执行计划与cost

SQL> set lines 300 pages 300
SQL> explain plan for select * from test;

Explained.

SQL> select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------
Plan hash value: 1357081020

--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 100K| 488K| 69 (2)| 00:00:01 |
| 1 | TABLE ACCESS FULL| TEST | 100K| 488K| 69 (2)| 00:00:01 |
--------------------------------------------------------------------------

8 rows selected.

计算将行数由10万提高到200万所使用的块数

SQL> select round(244*2000000/100000) from dual;

ROUND(244*2000000/100000)
-------------------------
4880

通过使用set_table_stats修改统计信息

SQL> exec dbms_stats.set_table_stats(ownname=>'SCOTT',tabname=>'TEST',numrows=>2000000,numblks=>4880,avgrlen=>5);

PL/SQL procedure successfully completed.

SQL>select table_name,num_rows,blocks,avg_row_len from user_tables where table_name='TEST';

TABLE_NAME NUM_ROWS BLOCKS AVG_ROW_LEN
------------------------------ ---------- ---------- -----------
TEST     2000000     4880    5

查看全表扫描的执行计划与cost

SQL> explain plan for select * from test;

Explained.

SQL> select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------
Plan hash value: 1357081020

--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2000K| 9765K| 1341 (2)| 00:00:17 |
| 1 | TABLE ACCESS FULL| TEST | 2000K| 9765K| 1341 (2)| 00:00:17 |
--------------------------------------------------------------------------

8 rows selected.

转载于:https://www.cnblogs.com/SUN-PH/p/7655158.html

使用dbms_stats.gather_table_stats调整表的统计信息相关推荐

  1. dbms_stats.lock_table_stats对于没有统计信息的表分区同样有效

    常见的分区表DDL如 split partition.add partition都会生成没有统计信息的表分区table partition,长期以来我对dbms_stats.lock_table_st ...

  2. ORA-03001,GATHER_TABLE_STATS数据库自动收集统计信息报错

    1.根据Alert报错信息,查询Trace日志 /oracle/app/oracle/admin/fgsquery/bdump/fgsquery_j001_11111.trc Oracle Datab ...

  3. oracle更新统计信息执行计划,为准确生成执行计划更新统计信息-analyze与dbms_stats...

    如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息. 例如索引跳跃式扫描(INDEX ...

  4. oracle database 12cr2 使用 dbms_stat 采集统计信息

    dbms_stat 是oracle database 采集统计信息的集成工具.非常方便和高效. 备份 创建stat_table begindbms_stats.create_stat_table(ow ...

  5. Oracle收集统计信息

    Oracle收集统计信息 优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN: 列统计: --列中唯一值的数量(NDV ...

  6. Oracle 12c数据库优化器统计信息收集的最佳实践

    Oracle 12c数据库优化器统计信息收集的最佳实践 转载自     沃趣科技(ID:woqutech) 作者         刘金龙(译) 原文链接   http://www.oracle.com ...

  7. 详解Oracle统计信息

    优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN: 列统计: --列中唯一值的数量(NDV),NULL值的数量,数据 ...

  8. 收集oracle统计信息

    原文地址为: 收集oracle统计信息 优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN: 列统计: --列中唯一值 ...

  9. 浅析Oracle统计信息

    oracle优化器(Optimizer) 优化器对于每一位从业人士都不陌生,它是oracle数据库内置的核心子系统,是数据库的核心,可以说优化器是数据库的一个灵魂,它在一定程度上决定了数据库的效率. ...

最新文章

  1. python嵩天课后思考题_Python语言程序设计基础(第二版)嵩天等课后习题答案
  2. 在Android Studio进行“简单配置”单元测试(Android Junit)
  3. 不可多得的Javascript(AJAX)开发工具 - Aptana
  4. 最优化理论与方法(part4)--秩一校正
  5. 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板
  6. 《大数据管理概论》一2.5 知识融合技术
  7. PyQt5系列(一)第一个helloworld
  8. Ubuntu 1804 桌面版 Eclipse + JSP 学习记录
  9. cardBattle游戏启动场景设计
  10. YYText 源码剖析:CoreText 与异步绘制
  11. python怎么把小写改成大写_Python 把金额小写转换成大写
  12. 爱心的数学函数方程_数学表白函数—心形线
  13. 前端学习-jquery-实现点击button对文本的add及detele
  14. 异步编程不会?我教你啊!CompletableFuture(JDK1.8)
  15. 开心网程炳皓:早期创业公司应该做一根针
  16. 创建与维护MySQL数据库
  17. web网页设计实例作业 ——中国风文化传媒企业官网(6页) 简单个人网页设计作业 静态HTML文化主题网页作业
  18. 教你用记账方法了解账户总收支结余
  19. 全网最详细,宿主机ping虚拟机的主机名失败,但ping虚拟机的ip成功
  20. 用于单图像超分辨率的增强深度残差网络

热门文章

  1. 大数据 互联网架构阶段 Nginx的使用
  2. 【Qt】数据库用户接口层
  3. 【Linux】Linux基本命令(一)
  4. Android开发中的多线程编程技术
  5. .net MySQL事物_在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装...
  6. java 过滤文件名_Java FileNameFilter过滤文件名
  7. struts2找不到action_第一次用上Struts2框架做Web开发的体验……
  8. 不知道如何选择的时候,付诸行动比选择更重要
  9. 关于高德地图Android开发时地图只显示一次、第二次打开不定位的解决办法
  10. 每天一道LeetCode-----判断一个数是否是happy number(每一位的平方和最终为1)