informix数据库索引使用与维护
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
informix数据库索引使用与维护.txt都是一个山的狐狸,你跟我讲什么聊斋,站在离你最近的地方,眺望你对别人的微笑,即使心是百般的疼痛只为把你的一举一动尽收眼底.刺眼的白色,让我明白什么是纯粹的伤害。informix数据库索引使用与维护
王增印
对于我们广泛使用的informix数据库系统,它能使我们及时快速准确地管理和使用数据,而要使我们加快数据使用的速度和效率,最重要的一点是要能正确合理地对数据库建立索引。因此为在工作中对数据使用更合理高效,informix数据库索引建立、限制及适用范围及应用维护等问题作一表述。
给表中的字段加索引能帮助我们快捷的使用数据库,但是如果表加的索引不当非但不能加快对数据库的访问,甚至造成informix-sql的错误,中止对库的管理。因而,在建立库表之前需详细了解它的适用范围及限制。
在如下情况下适于建立数据库索引:
a、适用于对大型数据库查找并连续输出,如同查找字典越厚越显出索引的重要性。
b、给连接字段加索引,当你库中包含很多表时,往往第一张表中至少有一个连接字段,则给连接字段加索引。(如会计帐务中户主帐与明细帐校验核对时,须连续对户主帐中每一项在明细帐中查找有效值,而户主帐与明细帐中在帐号字段上是连接的,而此时使用索引比不使用大大提高了工效,如果这两个帐表的记录数都达数千时,不建索引将不可能完成这项工作。)
c、自动索引,如果你执行的是包含两个表的连接操作且连接字段不加索引的select语句,则rdsql在执行连接操作之前给记录数较多的表自动建立临时索引,检索操作完成后,索引消失,它有利于无索引检索速度的改善。
d、对于经常要查找和排序的字段,它可以在你使用一段时间后,确信要经常查找和排序的字段,你可随时加上。
e、须至少是一个表且其中多于200个记录,虽然informix-spl对于一个表建立索引的数量及表记录多少是不限制的,但建立索引的同时,对于录入和修改数据时,sql都要更新表和索引,同时索引也占用磁盘空间,即对于一个小表建立索引不仅减慢速度还多占空间。
f、要避免给含大量重复值的字段加索引,它会显著减慢删除数据和改变索引字段值的操作。
对数据库建立的索引有如下限制:
a、建索引的字段或字组长度不应超过120字节,否则会造成sql错误。
b、被加索引的字段,如果其中有6000个共同项时,也会导致sql错误。
当你建立库索引时,对于库中记录和字段情况有了详细的了解,并由上面得知它的适用范围和限制后,就可以按如下五种类型准确适宜的建立库索引,下面分情况介绍这五种类型索引:
a、单字段索引,当你只须按单字段排序结果时,就可只对单字段加索引,命令为:
createindexnlont1(a1)
b、多字段索引,当你须对两个或两个以上字段值依次排序结果时,可对这些字段同时加上索引,命令为:
createindexnlont1(a1,a2,...,an)
c、非重复输入索引,当你建此索引后可避免用户在索引字段中输入重复信息,如果在输入与索引字段已有值重复时,sql提示错误,中止程序运行。建立的命令为:
createuniqueindexnlont1(a1,a2...,an)
如果不使用unique则为可重复输入索引。
d、升、降序排列输出索引,rdsql建立的索引不加说明时其排序结果为升序,即对于char 型而言顺序为a-z,对于数据值型字段而言为从小到大,对于date字段而言时间从早到晚等等,如果加入desc说明时,则建立的索引为降序的。建立的命令为:
createindexontable(a1desc)
e、聚类索引
聚类索引可使表的物理顺序等同于索引顺序,由于unix和dos从磁盘存取信息,物理地存放于同一块的记录越多,且顺序同于索引顺序,则查询这些记录就越快,rdsql通过执行
cre ateindex和alterindex来排列或分组表数据,但当用户增加新记录或修改现记录时,数据分组将变化,可先将前一分组清掉,再分组,命令为:
1.执行alterindextonotcluster,使得用户按第一索引排列但不分组。
2.执行alterindextocluster,使得用户按第二索引排列并分组。
当索引按要求建好后,就得在使用中经常加以维护,日常须经常对数据库索引加以检查,一旦发现问题,及时修复。
对于索引的检查修复方法有两种:即利用库管理命令bcheck或手工命令。
a、利用bcheck命令:bckeck是一个实用程序,它可比较索引文件(.idx)和数据文件(.dat)的一致性,不一致时,可删除和重建这些有问题的索引,它须在操作系统命令上运行,须在数据库目录下或给出库表的完整路径名。bcheck命令语法如下:
bcheck-[i l y n q s]文件名
其中的选项为:-i仅检查索引文件
-l列出e+树中的项
-n对所有提问自动回答(″no″)
-y对所有提问自动回答(″yes″)
-q不打印程序的标题
-s重新估算索引文件结点的大小
使用命令如:#bcheck-y*
bcheck命令简单实用,特别适用于多个索引的检查修复,但有时,当表太多太大时,bcheck会因调用内存太多而出现内存错误,这时可用下面介绍的手工修复方式。
b、利用手工方式:首先在操作系统中调用isql命令,进入table选项中的indexes选项,可查出目前使用的索引名称、数量及所索引的字段和索引类型,然后在informix的query -language状态中执行:
1、dropindex索引名,此命令为删除索引。
2、createindex索引名on表名(a1,a2,...an),此命令为按查出的索引的有关情况重建索引。