索引的管理与应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

军字一号数据库索引的应用与维护探讨

刘志敏

(解放军总医院计算机室,北京市100853)

[摘要]军字一号医院信息系统是一个典型的数据库应用系统,其中使用了大量的索引对象,如何正确地使用和维护,关系到整个系统的性能。本文首先介绍了索引的作用及其优缺点,同时根据Oracle数据库的特点,提出了应用中建立索引应当掌握的原则,并针对应用中索引使用可能存在的问题,结合实际例句,阐述了如何合理使用索引,最后还根据军字一号的应用,简要介绍了索引的维护管理解决方案。

[关键词]医院信息系统;数据库;索引

Application and Maintenance of the Database Indexes on

Hospital Information System

LIU Zhi-min

(Computer Department of PLA General Hospital, Beijing 100853, China)Abstract: Hospital Information System is a typical database application, in which a large number of tables and indexes are applied. To apply and maintain these tables and indexes correctly is relative to the whole system’s performance. This article introduces the functions, merits and demerits of indexes. According to the features of Oracle databases, the rules that should be mastered to create indexes in applications are provided. Meanwhile, some samples are given to explain how to use indexes rationally. A solution on how to maintain and manage indexes is briefly described finally.

Key words: Hospital Information System;database;index

1 索引的功能及应用概述

众所周知,信息系统在当今社会中几乎是无所不在,然而,无论信息系统规模大小,在其后面必然会有数据库管理系统的支撑,因此,数据库应用在系统设计、开发、实施、运行及维护的各个阶段都起着举足轻重的作用。军字一号医院信息系统就是一个典型的数据库应用系统,随着技术的进步与发展,医院的应用无论从深度还是广度也都在迅速扩张,并已经成为一个现代化医院运营管理不可缺少的重要组成部分,如何管理与维护好数据库,对医院来说至关重要,应该给予高度的重视。

在数据库管理系统中,存在各种对象,包括表、索引、触发器、视图、存储过程、同义词、序号发生器等,其中大量使用的是表,而伴随表的使用,一定会有大量的索引存在。例如,目前在我院数据库中,共有8746个对象,其中类型为表的为1828个,而类型为索引的有1850个,除了我们应用中使用的大量同义词之外,使用最多的就是索引,充分证明了索引在数据库应用中的重要地位,因此,数据库的管理与维护所涉及的诸多方面,索引也是不容忽视的一个。

用最简单的比喻,表数据的索引如同一本书的目录,通过目录的页码可以快速地定位书

中特定内容,同样,通过索引中记录的数据行ID,可以快速地定位特定行数据,因此说,索引是为提高数据检索的性能而创建的。如同目录很难针对书中每个字词一样,索引也很难针对数据行的所有列,因此目录只是针对最有代表性的章节,而索引也是指定表中经常要作为查询条件的那些有意义的列。索引是与表相关的可选结构,建立在表的一个或多个列上,当索引创建后由数据库管理系统自动维护和使用。维护是指在表数据更新时,例如对数据行执行增删改操作,与其相关的索引也在自动更新,这是要占用系统资源的,就象书的章节内容改动时需要更新目录一样,只是这些操作对数据库用户是透明的;使用是指在访问数据库时,通过索引查找相应的数据行,能够加快速度,提高效率。

索引在提高数据库访问速度的同时,也带来相应维护的开销,因此,索引并非总能带来理想中的性能提升,本文仅就索引这个数据库对象,结合军字一号的应用,进行讨论。

2 创建索引的原则

索引是数据库中需要占存储空间的对象,其结构中不但包含相应的索引值,还包含与该索引值相关的表中数据行的指针,即实现直接寻址的行ID。索引创建后,对应用开发人员来说是透明的,使用时不需要专门指定,当分析执行SQL语句时,根据优化器决定是否使用。通常开发人员为了改善应用性能,希望建立更多的索引,而数据库管理员为了保证整个系统的运行性能,严格控制索引的建立。

例如在我院,门诊收费系统共占用存储空间3.27G,其中表使用1.68G,占51.38%,而索引使用1.59G,占48.62%,从这些统计数字来看,表数据与索引所占空间基本相当,这仅是存储资源,还应当考虑维护这些索引时的CPU、内存及I/O开销,也是相当可观的。

创建索引,关键是要知道哪些索引的建立能够使其带来的好处大于开销,因此,应当由数据库管理员和应用开发人员一起来确定。以下是需要注意和掌握的原则:

1、能不建的索引一律不建。只为查询条件中频繁使用及多表联结需要的列创建索引,如果目前应用查询条件中根本没有使用,或者很少使用的列,不必为其建索引。如果某些索引可能一个月才使用一次,可以考虑在需要时临时创建。必要的主键除外,因为Oracle会自动为主键约束创建唯一索引的。

2、对于大的索引指定适当的存储参数。如果是一个有经验的数据库管理员,在定义大型表时,会格外注意指定其存储参数,尽量避免使用系统缺省定义。定义约束中使用的索引往往容易被忽视,如果忘记,可能会造成不合理的存储,影响系统的性能。

3、索引的存储尽量与表数据分开。通常系统在维护数据的同时,肯定会维护与其相关的索引,为避免I/O冲突,提高系统的并发处理能力,尽量将数据与索引分别存放于不同的物理存储设备上。

4、索引列的重复值尽量少。在联机事务处理应用模式中,为提高索引效率,在定义索引列时,应当尽量挑选重复值少的列。例如,病人主索引表中的病人ID。

5、在复合索引中,列的次序是有意义的,查询中最常用的列最好放在前面,尽量避免查询条件没有第一列所导致索引无法使用的情况发生。另外,如果将复合索引中重复值少的列放在前面,还可以提高索引效率。

当然,创建索引还有许多其他需要注意的方面,可以参照有关文档,并结合实际的软硬件环境和具体的应用来权衡。索引创建以后,更多的关注应该是如何正确地使用这些索引,以及在系统运行过程中做好索引的维护,这样才能真正达到预期目的。

3 应用中如何正确使用索引

目前军字一号医院信息系统大部分应用平台都是Windows2000+Oracle8.1.7或Windows NT+Oracle7.3.3,由于历史原因,该应用是在Oracle早期版本上开发的,所有SQL语句的

相关文档
最新文档