当前位置: 首页 > 期刊 > 《中国健康月刊·B版》 > 2011年第10期 > 正文
编号:12157759
基于索引技术提升大型HIS系统查询效率(2)
http://www.100md.com 2011年10月1日 王文翠 詹永丰
第1页

    参见附件(2110KB,2页)。

     4.2取消应用在索引列上的函数

    表1第二条SQL是在门诊处方发药时,读门诊病人的诊断信息。outp_mr表上只有一个主键索引pk_outp_mr (visit_date, visit_no, ordinal),目前该表数据量已经达到百万,并且表现出明显的增长趋势,数据增长量与日门诊量相当。

    SQL的查询条件对索引列visit_date和visit_no进行了函数计算,导致优化器不能有效的使用索引而选择全表扫描,如表3,全表扫描操作的I/O代价远高于索引扫描,执行效率低,平均耗时3.114秒。对这条SQL语句进行查询重写,将Where子句的查询条件进行语义等价变换,取消应用在索引列上的函数visit_date=to_date(substr(:serial_no,1,8),'yyyymmdd') and visit_no = substr(:serial_no,9,5) and ordinal=1。

    表3取消索引列上的函数前的执行计划

    4.3 性能评价

    在对dispensing_date_time列建立索引之后,查询计划发生改变,如表4所示,索引跳跃式扫描被基于新建索引的索引域扫描代替,扫描代价明显减少,由原来的46453降低到1,扫描时间仅为0.16秒,性能提升明显,如图1。

    在对第二条SQL语句进行查询重写之后,SQL语句执行计划也发生改变,如表5:

    表5 取消索引列上的函数后的执行计划

    对于outp_mr的访问由全表扫描改为索引唯一扫描,执行效率明显提高,平均耗时仅为0.02秒,调整前后执行效率对比如图2。

    图1建立索引前后执行时间比较图2取消索引列上的函数前后执行时间比较

    5 结论

    索引的合理有效使用在应用系统开发实施过程中是至关重要的。合理的索引大幅提升系统性能,不合理的索引不仅会导致系统性能下降,甚至可能导致数据库系统的崩溃。数据库管理员需要认真分析系统应用,定位影响系统性能的关键点,有的放矢加以解决。“优化”并不是“一劳永逸”的,随着数据的增长、应用的调整,需要对索引进行再次优化,以满足当时效率上的要求。

    参考文献

    [1] 朱君. 基于索引的SQL语句查询优化方法[J].东莞理工学院学报,2003,10(2):18-20.

    [2] 郭珉. ORACLE数据库SQL优化原则[J].计算机系统应用,2010,19(4):170-173.

    [3] 宋彩霞,路新春. Oracle数据库基于索引SQL优化方法的研究与实现[J].计算机工程与设计,2004,25(12):2327-2330.

    [4] Oracle9i Database Performance Tuning Guide and Reference,Release 2(9.2),2002:73-75.

您现在查看是摘要介绍页,详见PDF附件(2110KB,2页)