如何运行 为具有复合索引的informix table 手动更新统计信息?

How to run update statistics manually for informix table which is having composite indexes?

假设有一个table,其架构如下所示,包含大量记录。为了获得更好的性能,我手动执行更新统计信息。我需要知道为复合索引执行更新统计命令的正确方法是什么。中高应该根据情况怎么用?

create table "informix".table1
  (
    ip_address char(15),
    mobile_no char(10),
    name char(20)
  ) in dbs1 extent size 64 next size 32 lock mode row;



create unique index "informix".idx_table1_1 on "informix".table1
    (ip_address,name) using btree  in idxdbs;

对于上面的table,以下两种方法更新统计数据的最佳方法是什么?

update statistics high for table table1(ip_address,name) force;

update statistics medium for table table1(name) force;
update statistics high for table table1(ip_address) force;

Informix 12.10 手册建议:

  • Using the MEDIUM mode option

    After UPDATE STATISTICS MEDIUM has been run on a table, the query optimizer typically chooses a more efficient execution plan, compared to the same SELECT statement when only LOW mode column distribution statistics are available for the table. column.

  • Using the HIGH mode option:

    For indexed tables that already have MEDIUM mode distribution statistics available for every column, the query optimizer typically chooses more efficient execution plans after you run UPDATE STATISTICS HIGH on every column that is part of an index key.

由于 ip_addressname 都是唯一索引的一部分(您也应该考虑将其指定为主键),第一个选项——单个 HIGH 模式语句——可能是最合适的。无需先在同一列上 运行 MEDIUM 模式。

测试一下 — YMMV。

您正在 运行 查询时遇到性能问题吗? table 有多少条记录?您没有很多字段,但通过将名称字段重新定义为 VARCHAR 而不是 CHAR 并定期重建索引可能会有所改进。是否有任何记录已更新,或者这是一个只是定期插入新记录的查找 table?您能否向我们展示您 运行 针对此 table 的查询,并向我们展示 EXPLAIN 文件以查看查询成本和查询优化器正在使用的计划?如果您的查询是按这些字段进行搜索,您可能需要在名称和 mobile_no 字段上建立索引,并且您还可能受益于根据正在 运行 的查询创建集群索引。请记住,当您有索引时,新记录的插入和更新速度较慢,因为它还必须更新索引 table。