最近发现Informix数据库在跨表查询时较慢,上网查了一下说要定期执行一下update statistics,以更新系统统计信息,文章说的步骤如下:
(1)针对每张表运行
Update Statistics Medium for table tabname Distributions Only
(2)针对每张表中带索引的第一个字段运行
Update Statistics High for table tabname (fieldname)
(3)对某些表中带复合索引的每一个字段运行
Update Statistics Low for table tabname (fieldname1,fieldname2……)
而且须序不能弄反。但我想问,是对数据库中的每一张表(系统表、应用表)、每一个首个索引字段、第一个索引字段都执行update statistics吗?还是只针对系统表systables、sysindexs、syscolumns、sysdistrib四个表更新就可以了。如果是前者的话那就必须编写一个shell了,而且每次有表结构变化时都要更新shell,太麻烦了,有没有简便的方法。请各位高手指教。多谢
------解决方案--------------------------------------------------------
很少听见这种数据库,
先帮你顶下
------解决方案--------------------------------------------------------
你只要直接对那个数据库运行update statistics就可以了,不用考虑太多了,速度也不会太慢。
这个你可以设定一个自动处理,每天晚上运行一次就可以了。
------解决方案--------------------------------------------------------
楼上正确。
当然如果你是一直都这么慢,那就是查询语句的问题了,需要修改where语句了。
------解决方案--------------------------------------------------------
最好的办法就是写shell脚本,不忙的时候自动运行。
------解决方案--------------------------------------------------------
如果你的数据库几百兆直接update statistics可以
如果几十个G呢?
跨表查询可以把数据库强制设成只根据索引优化,好像是OPTMIND就行了
可以不用update statistics了
------解决方案--------------------------------------------------------
写个shell脚本,在crontab服务中定期执行。
------解决方案--------------------------------------------------------
3楼说的有道理,或者是你索引建立的有问题也有可能
5楼的方法应该不行
------解决方案--------------------------------------------------------
在你修改了表结构或者索引,还有就是大量新数据导入之后的时候做Update Statistics比较有用,Update Statistics的目的就是把索引重新对应起来。
对一张表做Update Statistics之后不需要再对其中每个索引单独做了。
------解决方案--------------------------------------------------------
它的意思是主要的系统表和应用表...
当然是对每张表,每个索引都update statistics更好啊,但是显麻烦的话,就直接直接对数据库运行update statistics就可以了. 你可以先试试,慢的话,你再update表和索引. 写个shell啊,你也不会经常更改表结构吧.