SQL优化 第四章 统计信息

参考资料:
本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。

1 统计信息说明

数据库的数据是一直变化的,那么执行计划有时候也是要动态变化的,举个简单的例子,今天某张表的商品ID是分布均匀的,那么某个促销活动,可能会让这个商品ID对应的数据暴增,原来走索引的查询,可能要走全表了。人为监控是表变化是不可能的,也是实现不了的。但是优化器已经在做这个工作了,优化器会自动调整执行计划。

那么问题来了,优化器是怎么做到的。

首先,关系数据库有完整的数学理论基础,关系代数,那么就可以根据等价变化,提供更好的执行计划。

但是,等价变换是优化的基础准则,但是这些等价变化,以及访问路径的变化(索引读还是全表扫),还要有一些参照数据才可以,这些参照数据就是统计信息。

2 统计信息收集脚本,

BEGIN

  DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'SCOTT',

                                TABNAME=>'TEST1',

                                ESTIMATE_PERCENT=>100,

                                METHOD_OPT=>'FOR COLUMNS OWNER SIZE SKEWONLY',

                                NO_INVALIDATE=>FALSE,

                                DEGREE=>1,

                                CASCADE=>TRUE);

END;

/

这里面参数大家自己在网上查阅以下,我们这里只是重点说一下METHOD_OPT,这一列决定直方图生成。

那么什么是直方图呢,简单说,直方图描述了某列的数据分布均匀状况,这个是优化器选在访问路径以及表连接方式的重要参数。

3 扩展统计信息

有时候,只是收集某列的统计信息,并不会使优化器选出较好的执行计划,需要多列一起收集,这就是扩展统计信息收集,这个希望自己调查。

猜你喜欢

转载自blog.csdn.net/songjian1104/article/details/91349933