“军卫一号”门诊医师站重建数据库索引的设计与探讨

2016-04-06 08:36昝汝涛
实用医药杂志 2016年5期
关键词:数据库

昝汝涛,薛 兵,尹 强



“军卫一号”门诊医师站重建数据库索引的设计与探讨

昝汝涛,薛兵,尹强

[关键词]军卫一号;门诊医师站;数据库;索引

笔者所在医院“军字一号”门诊医师站子系统于2010年正式启用,在日常医疗活动中占据举足轻重的作用,有效地规范了门急诊业务,缩短了患者的候诊时间,提高了门急诊工作效率。结合医院门急诊医师反映门诊医师站系统在调取患者历史处方、门诊病历及患者就诊序列时反应较慢的问题,笔者从实践出发通过大量测试认为,使用创建门诊医师站的数据库索引可提升“军卫一号”门诊医师站的速率。

1 设计分析

1.1门诊医师站存在的主要问题通过门急诊医师的反映以及笔者实际的测试发现,困扰医院门诊医师站速度慢的问题主要存在三个方面。第一,门急诊医师在调取患者历史处方时效率较低,数据库延迟较大。第二,调取患者门诊病历时数据库延迟较大。第三,门急诊医师站在读取门急诊患者就诊序列时延迟较大。

1.2创建索引的优势通过多年对“军卫一号”信息化了解及大量工作实践,笔者发现创建索引可以大大提高系统的性能。优势主要有以下方面:(1)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性;(2)可以大大加快数据的检索速度;(3)可以加速表和表之间的链接,特别是在实现数据的参考完整性方面特别有意义;(4)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间;(5)通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。那么,通过创建数据库索引能不能优化门诊医师站的性能呢?带着这个问题笔者考虑在门诊医师(OutpDoct)用户下面重建所有索引,看能否解决医院门诊医师站所面临的问题。

2 测试准备阶段

根据医院的实际情况,在医院备用HIS服务器上做测试,将在线数据库的冷备份文件拷贝过来,作为备用数据库。

2.1分析门诊医师站的表结构创建索引的第一步首先要将门诊医师站的表结构了解清楚。理清门诊医师站(OutpDoct)用户下相关的表及各表之间的关联。主要涉及原始表包括:

OutpDoct.outp_mr

OutpDoct.outp_orders

OutpDoct.outp_orders_costs

OutpDoct.outp_presc

OutpDoct.outp_treat_rec

OutpDoct.outp_orders_t

OutpDoct.outp_wait_queue

2.2导出门诊历史数据近年来,随着医院门诊量的不断增加,门诊医师站表空间也在不断扩增,门诊医师站相关表中的记录也在成倍增长,数据的增加也会影响到门诊医师站使用速度。笔者将门诊医师站(OutpDoct)用户下所涉及的原始表中指定时间段的记录导出到相应临时表中,再将临时表中数据做导出(Exp)操作,然后把指定时间段内的数据删除。

2.3列出详细的升级计划和步骤在实验服务器上进行模拟操作,同时要注意数据结构改变也是一项复杂的任务,一定要谨慎认真,通过实验既能及时发现问题,也能熟悉转换过程。

3 升级实施阶段

3.1断开数据库服务器与用户之间连接断开用户的连接,在对数据库操作的时候要避免用户对数据的修改,最简单的办法就是断开服务器的网线。

3.2冷备份在线数据库冷备份数据库无论在实验服务器上升级是否顺利,都需要在准备升级前对在线服务器做一次全库冷备份,一旦出现什么异常情况,至少可以恢复到升级前的状态,这一点切记。

3.3利用批处理命令文件完成升级工作为了保证升级步骤的连续性,笔者使用批处理命令的方式来完成此次操作,首先将历史数据备份到临时表,然后做Exp导出操作。

3.4导出相关表的列表文件导出相关表的列表文件,将导出的记录数做相应的备份。

outdoct_bak_exp.lst命令如下:

userid=outpdoct/outpdoct

grants=n

indexes=n

rows=y

tables=(outp_mr_bak,

outp_orders_bak,

outp_orders_costs_bak,

outp_presc_bak,

outp_treat_rec_bak,

outp_orders_t_bak)

3.5保存创建的临时表将保存的临时表作为数据恢复原始表,以保证数据恢复完整性。

outpdoct_re.sql命令如下:

connectoutpdoct/outpdoct

insert into outpdoct.outp_mr

select*

fromoutp_mr_bak;

commit;

3.6重建用户下所有索引在门诊医师(outpdoct)用户下面重建所有索引,以消除索引碎片,提高门诊医师站系统的性能。

3.7查看生成的Log日志文件导出历史数据及建立索引工作完成后,查看重建日志.Log文件,未发现错误,说明以上工作都是成功的。

4 稳定运行阶段

上述工作完成后,立即测试门诊医师站速度,发现门诊医师站速率大幅提升,困扰工作的问题完全解决。索引重建过程中要与门诊部做好沟通工作,及时反馈门诊医师站在索引重建后出现的问题,还要密切关注全院“军卫一号”其他系统的运行情况,发现问题及时解决。

虽然索引有许多优点,但是为表中的每一个列都增加索引,是非常不明智的。因为:(1)创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;(2)索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大;(3)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

一般来说,下列情况不应该创建索引:(1)对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。(2)对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少增加索引,并不能明显加快检索速度。(3)对于那些定义为text,image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。(4)当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。所以,在创建数据库索引时要充分考虑上述的问题,充分发挥数据库索引在数据库中的作用。

参考文献

[1]孙永宁.提高查询效率的oracle索引优化策略探析[J].电子技术与软件工程,2013,18(2):229.

[2]马斌,钟方伟,余长江,等.数据库索引对象优化方法分析与应用[J].电脑知识与技术,2014(31):7241-7243.

[3]刘超.探讨索引技术在ORACLE数据库中的运用问题[J].信息与电脑:理论版,2014,12(1):81-82.

[4]于彦国. Oracle数据库应用系统的性能优化[J].电子技术与软件工程,2015,21(2):214-215.

[2015-10-12收稿,2015-11-10修回]

[本文编辑:王军红]

[中图分类号]R197.324

[文献标志码]B

DOI:10.14172/j.issn1671-4008.2016.05.035

[作者单位]261021山东潍坊,解放军89医院(昝汝涛,薛兵,尹强)

猜你喜欢
数据库
超星数据库录入证
本刊加入数据库的声明
数据库
数据库
数据库
两种新的非确定数据库上的Top-K查询
数据库
国外数据库高被引论文排行TOP10
数据库
数据库