达梦数据库统计信息的重要性及维护
前言
数据库的统计信息是什么?简单的说,它就是存储在数据字典中的一组数据,从多个角度描述了数据库对象的详细信息,如行数、页数、列数据分布情况、索引列数据分布和直方图信息情况等等。统计信息的作用是什么?举个例子,你想从家去市图书馆,你可以骑行、开车或坐地铁,这个时候你就要做个决定,哪种出行方式最适合你且时间成本最低,这个决定由什么来帮助你确定呢?是信息,你打开百度地图一看,发现现在很堵车,打开天气通APP发现气温很低且北风5级。于是你做出了坐地铁的决定,这就是信息帮助你做出了最优的出行方式。同样的道理,当一条SQL请求发送到数据库的时候,数据库的优化器也要通过一系列的代价算法来决定如何生成成本最低的执行计划(连接方式、访问路径、连接顺序及索引的选择),同时计算出所需花费的成本。而这个执行计划和花费的成本就需要统计信息的帮助了。下面就从如何查看、收集、维护和计划收集统计信息几个方面来分别讲解一下,希望能给达梦数据库爱好者一些帮助,也希望大家看到不准确的地方也能给出指正。
一、如何查看当前的统计信息
在介绍如何查看统计信息之前,先说下达梦数据库哪些对象不支持统计信息(参考DM8 SQL语言使用手册)。
- 外部表、DBLINK 远程表、动态视图、记录类型数组所用的临时表;
- 所在表空间为OFFLINE的对象;
- 位图索引,位图连接索引、虚索引、无效的索引、全文索引;
- BLOB、IMAGE、LONGVARBINARY、CLOB、TEXT、LONGVARCHAR 等列类型。
举例:获取SYSDBA用户emp表的统计信息
可通过DBMS_STATS包的TABLE_STATS_SHOW存储过程