假设有一个带有以下所示架构的表,其中包含大量记录。为了获得更好的性能,我手动执行更新统计信息。我需要知道对复合索引执行update statistics命令的正确方法是什么。我应该根据情况使用中高水平?
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;
对于上表,从以下两种方法中更新统计信息的最佳方法是什么?
update statistics high for table table1(ip_address,name) force;
OR
update statistics medium for table table1(name) force;
update statistics high for table table1(ip_address) force;
答案 0 :(得分:1)
Informix 12.10手册建议:
在表上运行UPDATE STATISTICS MEDIUM后,与仅LOW模式列分布统计信息可用于表的查询语句相比,查询优化器通常会选择效率更高的执行计划。列。
对于已经为每列提供MEDIUM模式分布统计信息的索引表,在对作为索引键一部分的每列运行UPDATE STATISTICS HIGH之后,查询优化器通常会选择更有效的执行计划。
由于ip_address
和name
都是唯一索引的一部分(您也应该考虑将其指定为主键),因此第一个选项(单个HIGH模式语句)可能是最合适的。无需先在同一列上运行MEDIUM模式。
测试-YMMV。
答案 1 :(得分:0)
您运行的查询是否存在性能问题?该表有多少条记录?您没有很多字段,但是通过将name字段重新定义为VARCHAR而不是CHAR并定期重建索引可能会有所改善。是否更新了任何记录,或者这是一个只是定期插入新记录的查找表?您能否向我们显示针对此表运行的查询,并向我们显示EXPLAIN文件以查看查询成本并计划查询优化器正在使用的内容?如果您要查询的是name和mobile_no字段,则可能需要在这些字段上进行索引,并且根据正在运行的查询,还可以从创建群集索引中受益。请记住,有索引时,新记录的插入和更新速度较慢,因为它也必须更新索引表。