SQL调优技巧:统计信息(文末福利)

统计信息类似于战争中的侦察兵,如果情报工作没有做好,打仗就会输掉战争。同样的道理,如果没有正确地收集表的统计信息,或者没有及时地更新表的统计信息,SQL的执行计划就会跑偏,SQL也就会出现性能问题。收集统计信息是为了让优化器选择最佳执行计划,以最少的代价(成本)查询出表中的数据。

统计信息主要分为表的统计信息、列的统计信息、索引的统计信息、系统的统计信息、数据字典的统计信息以及动态性能视图基表的统计信息。

关于系统的统计信息、数据字典的统计信息以及动态性能视图基表的统计信息本文不做讨论,本文重点讨论表的统计信息、列的统计信息以及索引的统计信息。

表的统计信息主要包含表的总行数(num_rows)、表的块数(blocks)以及行平均长度(avg_row_len),我们可以通过查询数据字典DBA_TABLES获取表的统计信息。

我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。

现在我们创建一个测试表T_STATS。

 

1SQL> create table t_stats as select * from dba_objects;
2Table created.

我们查看表T_STATS常用的表的统计信息。

 

1SQL> select owner, table_name, num_rows, blocks, avg_row_len
2  2    from dba_tables
3  3   where owner = 'SCOTT'
4  4     and table_name = 'T_STATS';
5OWNER           TABLE_NAME        NUM_ROWS     BLOCKS AVG_ROW_LEN
6--------------- --------------- ---------- ---------- -----------
7SCOTT           T_STATS

因为T_STATS是新创建的表,没有收集过统计信息,所以从DBA_TABLES查询数据是空的。

现在我们来收集表T_STATS的统计信息。

 

1SQL> BEGIN
2  2    DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'SCOTT',
3  3                                  tabname          => 'T_STATS',
4  4                                  estimate_percent => 100,
5  5                                  method_opt       => 'for all columns size auto',
6  6                                  no_invalidate    => FALSE,
7  7                                  degree           => 1,
8  8                                  cascade          => TRUE);
9  9  END;
10 10  /
11PL/SQL procedure successfully completed.

我们再次查看表的统计信息。

 

1SQL> select owner, table_name, num_rows, blocks, avg_row_len
2  2    from dba_tables
3  3   where owner = 'SCOTT'
4  4     and table_name = 'T_STATS';
5OWNER           TABLE_NAME        NUM_ROWS     BLOCKS AVG_ROW_LEN
6--------------- --------------- ---------- ---------- -----------
7SCOTT           T_STATS              72674       1061          97

从查询中我们可以看到,表T_STATS一共有72?674行数据,1?061个数据块,平均行长度为97字节。

列的统计信息主要包含列的基数、列中的空值数量以及列的数据分布情况(直方图)。我们可以通过数据字典DBA_TAB_COL_STATISTICS查看列的统计信息。

现在我们查看表T_STATS常用的列统计信息。

原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值