INFORMIX提供了一个基于成本的查询优化器,执行update statistics语句的作用就是将您创建的数据库表的有关统计信息更新到系统sysmaster的相关表中(如systables、syscolumns、sysindexes、sysdistrib、sysprocplan等),以便查询优化器选择最佳的执行路径。当sysmaster库中没有相应的统计信息,或者统计信息不十分准确时,优化器便无法制定一个行之有效的查询策略,其结果必然是进行大量极其可怕的顺序扫描,产生严重的性能问题。
因此,当您重新装载数据或者对数据库表进行了大量的更新 *** 作后,应该及时执行update statistics。也许您会发现,数据库一些参数配置的不合理可能使数据库效率降低百分之几,但如果您没有定期执行update statistics的话。数据库的性能则可能降低几到十几倍。
dbaccess school
选择Table——Create——输入表名student——然后依次输入各列名、数据类型、是否空值、缺省值——ESC退出——选择Exit退出
类似建立索引
只是简单说一下,dbaccess交互使用还是很简单的,如果终端截图的话太麻烦了
不如用个shell来得简单:
#!/bin/bashdbaccess school << EOF
CREATE TABLE student (
stuNo CHAR(10) NOT NULL,
tuition MONEY(15,2) DEFAULT 00,
inDate DATE NOT NULL,
state CHAR(1) DEFAULT '0'
);
CREATE UNIQUE INDEX stuindex ON student (stuNo, state);
EOF
lsvg -l datavg,确认存在相应的raw设备,并且synced/closedls -l /dev/r,确认相应的裸设备权限正确ls -l /informix/dbf,确认数据库链接文件正确oninit -vy,启动数据库onstat -,确认数据库是否online,使用onstat -d确认chunk状态,正常是PO-B状态,异常可能是PD-B状态,从你仅有的日志看,是从chk7-chk10不正常确认裸设备可读dd if=/dev/r of=/dev/null bs=1024k,表示chk7-chk10对应的lv名称。尝试强制OPEN这些chunk:onspaces -s datadbs -p /informix/dbs/datachk7 -o 0 -O其中datadbs为你实际的dbs名称如果都可以强制打开,那么再次onmode -ky ,再次oninit -vy
select
trunc(sum(a)),
trunc(sum(b))
from(
select
nvl(case
when
Time
between
A
and
B
then
count(id)
end,
0)
a,
nvl(case
when
Time
between
C
adn
D
then
count(id)
end,
0)b
from
table
group
by
id,Time)
--TRUNC(),截取。如:TRUNC(1095,0)position截取的位置
informix初始化与配置
Dbspace 为逻辑上的数据库管理单元,实际上对应一个或者多个 chunk,初始化 informix 数据库的时候,必须首先为系统建立一个 Dbspace 和该Dbspace所关联的 chunk。
系统初始化:
informix 安装目下建立一个目录dbs,新建一个文件 rootchk,并更改该文件的访问权限为 660,,#chmod 660 rootchk[ENTER],之后,在控制台输入#onmonitor 进入系统配置界面->选择 Parameters->Initialize,在 "RootName" 中输入 rootdbs, 在Primary Path中输入刚才创建的chunk文件rootchk。即:将 rootdbs 关联到 rootchk 上。
新建Dbspace:
首先在数据存储目录,$INFORMIXDIR/dbs 下建立一个新文件,testchk,更改访问权限为:660
然后控制台中:
#onmonitor
->Dbspaces->Create
输入 Dbspace Name
Full Pathname 中输入刚刚创建的 chunk 文件的全路径:/opt/informix/dbs/testchk
[ESC]
这样就创建了一个新的Dbspace,名字为testdbs
为Dbspace 添加 chunk:
首先在数据目录 $INFORMIXDIR 中新建一个 chunk 文件,datachk01,更改访问权限为 660;
控制台输入:#onmonitor
->Dbspaces->Add_Chunk
选择要添加 chunk 的 Dbspace
F3 或 Ctrl+b
在 Full Pathname 中填入刚刚新建的 chunk 文件的全路径: /opt/informix/dbs/datachk01 即可
要配置数据库首先需要停止数据库服务
onmode -ky
初始化数据库系统
oninit -i 或 oninit -iy
新建数据库:
#dbaccess [ENTER]
Database->Create->输入数据库名
这是我建一个步骤:
root@sdunicomd # touch itnmschk
root@sdunicomd # chmod 660 itnmschk
root@sdunicomd # touch itnmschk
root@sdunicomd # chmod 660 itnmschk1
sdunicomd_cdmatmn$onspaces -c -d itnmsdbs -p /u1/tmn/newcdma/dbs/itnmschk -o 5120 -s 2000000
Verifying physical disk space, please wait
Space successfully added
WARNING A level 0 archive of Root DBSpace will need to be done
sdunicomd_cdmatmn$onspaces -a itnmsdbs -p /u1/tmn/newcdma/dbs/itnmschk1 -o 5120 -s 2000000
Verifying physical disk space, please wait
Chunk successfully added
sdunicomd_cdmatmn$onspaces -d itnmsdbs
WARNING: Dropping a DBspace
Do you really want to continue (y/n)y
Space successfully dropped
WARNING A level 0 archive will need to be done before any chunks from
DBspace itnms can be reused (see Dynamic Server Administrator's manual)
CREATE DATABASE itnms
IN itnmsdbs
WITH BUFFERED LOG
下面以关系数据库系统Informix为例,介绍改善用户查询计划的方法。
1.合理使用索引
索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处,其使用原则如下:
●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。
●在频繁进行排序或分组(即进行group by或order by *** 作)的列上建立索引。
●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。
●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。
●使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁 *** 作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。
2.避免或简化排序
应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素:
●索引中不包括一个或几个待排序的列;
●group by或order by子句中列的次序与索引的次序不一样;
●排序的列来自不同的表。
为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。
以上就是关于为什么 Informix 数据库需要定期 UPDATE STATISTICS全部的内容,包括:为什么 Informix 数据库需要定期 UPDATE STATISTICS、环境是redhat linux, informix 数据库,在 dbaccess 模式下建立一张表、informix的exportvg importvg后数据出现问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)