UPDATE STATISTICS 语句的性能因素

您制作的 UPDATE STATISTICS 语句检测的对象的列表越明确,它完成执行就越快。限定列分发的数目,会提高更新速度。类似地,精度影响更新的速度。如果所有其他关键字一样,则 LOW 运行最快,但 HIGH 检测的数据最多。

对于 GBase 8s 数据库服务器, AUTO_STAT_MODE 设置可提高刷新数据分发统计信息的 UPDATE STATISTICS 操作的效率。 这使得数据库服务器能够有选择地仅重新计算表或分片分发,自从上一次计算统计信息以来,作为 DML 操作的结果,这些分发已变得陈旧了。 如同由一个显式的或缺省的 STATCHANGE 表属性定义的阈值更改所决定的那样。 要获取关于如何设置 STATCHANGE 以及如何为仅刷新陈旧的分发统计信息而启用 UPDATE STATISTICS 的自动模式的信息,请参阅 这些主题:

在 LOW 模式下,在收集 UPDATE STATISTICS 操作的索引统计信息期间,USTLOW_SAMPLE 环境选项 启用采样。对于多于 100 K 叶页的索引,使用采样的统计信息的收集可提高 UPDATE STATISTICS 操作的速度。

UPDATE STATISTICS 语句的示例

UPDATE STATISTICS MEDIUM;
      UPDATE STATISTICS MEDIUM RESOLUTION 10;
      UPDATE STATISTICS MEDIUM RESOLUTION 10 .95;
      { RESOLUTION 10, CONFIDENCE .95}
      UPDATE STATISTICS MEDIUM RESOLUTION 10 DISTRIBUTIONS ONLY;
      UPDATE STATISTICS MEDIUM RESOLUTION 10 .95 DISTRIBUTIONS ONLY;
      
      UPDATE STATISTICS HIGH;
      UPDATE STATISTICS HIGH RESOLUTION 10;
      UPDATE STATISTICS HIGH RESOLUTION 10 DISTRIBUTIONS ONLY;
    
解析度必须大于 0.005 并小于或等于 10.0。信任水平必须在 [0.80, 0.99](包括 0.80 和 0.99)范围中。
下列示例是基于 company_proc 过程和 square_w_default 函数,定义如下:
CREATE PROCEDURE company_proc ( no_of_items INT,
          itm_quantity SMALLINT, sale_amount MONEY,
          customer VARCHAR(50), sales_person VARCHAR(30) )
          SPECIFIC spec_cmpy
          
          DEFINE salesperson_proc VARCHAR(60);
          
          -- Update the company table
          INSERT INTO company_tbl VALUES (no_of_items, itm_quantity,
          sale_amount, customer, sales_person);
          
          -- Generate the procedure name for the variable salesperson_proc
          LET salesperson_proc = sales_person || "." || "tbl" ||
          month(current) || "_" || year(current) || "_proc" ;
          
          -- Execute the SPL procedure that the salesperson_proc
          -- variable specifies
          EXECUTE PROCEDURE salesperson_proc (no_of_items,
          itm_quantity, sale_amount, customer);
          END PROCEDURE;
          
          
          CREATE FUNCTION square_w_default
          (i INT DEFAULT 0) {Specifies default value of i}
          RETURNING INT {Specifies return of INT value}
          SPECIFIC spec_square
          DEFINE j INT; {Defines routine variable j}
          LET j = i * i; {Finds square of i and assigns it to j}
          RETURN j; {Returns value of j to calling module}
          END FUNCTION;
        
下列 UPDATE STATISTICS 示例引用 company_proc 过程和 square_w_default 函数:
UPDATE STATISTICS  FOR PROCEDURE;
          UPDATE STATISTICS  FOR PROCEDURE company_proc1;
          UPDATE STATISTICS  FOR PROCEDURE
          company_proc1(INT,SMALLINT,MONEY,VARCHAR(50), VARCHAR(30));
          UPDATE STATISTICS FOR SPECIFIC PROCEDURE spec_cmpy;
          
          UPDATE STATISTICS FOR FUNCTION;
          UPDATE STATISTICS FOR FUNCTION square_w_default;
          UPDATE STATISTICS FOR FUNCTION square_w_default(INT);
          UPDATE STATISTICS FOR SPECIFIC FUNCTION spec_square;
        

要获取 UPDATE STATISTICS 的性能含义的讨论,请参阅您的 GBase 8s 性能指南

要获取如何使用 dbschema 实用程序来查看以 UPDATE STATISTICS 创建的分发的讨论,请参阅 GBase 8s 迁移指南