微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 医疗电子 > 医院数据库系统SQL语句优化分析

医院数据库系统SQL语句优化分析

时间:01-16 来源:互联网 点击:
3.2案例分析二

医院工作人员反映在药库系统自动计划模块执行速度很慢,有时大约需要半个小时才能跳出窗口。

经过分析发现,在w_yk_plan.cb_auto.clicked() 18行开始的代码如下:

ls_select+=" select YK_TYPK.YPXH,YPMC,YPGG,YPDW,GCSL,DCSL,0 "

ls_select+=" from YK_TYPK,YK_KCMX "

ls_select+=" where XTSB="+string(base_info.syscode)+" and DCSL>0 and GCSL>DCSL and YKZF=0 "

ls_select+=" and YK_TYPK.YPXH not in (select YPXH from YK_KCMX) "

ls_select+=" group by YK_TYPK.YPXH,YPMC,YPGG,YPDW,GCSL,DCSL "

显然是NOT IN语句导致速度很慢,然后把该语句改成:

ls_select+=" select YK_TYPK.YPXH,YPMC,YPGG,YPDW,GCSL,DCSL,0 "

ls_select+=" from YK_TYPK "

ls_select+=" where XTSB="+string(base_info.syscode)+" and DCSL>0 and GCSL>DCSL and YKZF=0 "

ls_select+=" and not exists ( select YPXH FROM YK_KCMX WHERE YK_TYPK.YPXH = YK_KCMX.YPXH ) "

ls_select+=" group by YK_TYPK.YPXH,YPMC,YPGG,YPDW,GCSL,DCSL “

结果5秒内执行完成。

3.3案例分析三

以下SQL的功能是医院用于作日报时显示哪些收费员还没有做过当天的个人日报,速度非常慢,每次都需要好几分钟才能出来数据。

显然这个问题是由于不合理的子查询造成的,经分析后我们把子查询从where子句中去除,语句改成如下后,2秒内数据库出来了。

某些HIS系统中病区系统中医嘱提交、医嘱执行、医技提交速度慢问题原因分析ZY_BQYZ 这个表中出院数据没有转出到ZY_BQYZ_CY 表中。

没有建立正确的索引,SQL 语句本身存在的问题,在医嘱提交中的WHERE子句:

WHERE ( ZY_BQYZ.ZYH = ZY_BRRY.ZYH AND ZY_BRRY.CYPB = 0 )

AND ( ZY_BQYZ.SRKS = :al_hsql)

AND ( ZY_BQYZ.LSBZ=0 OR ZY_BQYZ.LSBZ=2)

AND ( ZY_BQYZ.SYBZ = 0)

AND ( ZY_BQYZ.XMLX<4 )

AND ( ZY_BQYZ.YZPB=0 )

AND ( ZY_BQYZ.FYSX<2)

AND ( ZY_BQYZ.JFBZ<2)

AND ( ZY_BQYZ.YSBZ = 0 OR (ZY_BQYZ.YSBZ = 1 AND ZY_BQYZ.YSTJ = 1))

在医院执行模块的数据窗口SQL:

SELECT DISTINCT

ZY_BQYZ.ZYH,ZY_BRRY.BRCH,ZY_BRRY.ZYHM,ZY_BRRY.BRXM,ZY_BRRY.BRXZ

FROM ZY_BQYZ, ZY_BRRY

WHERE ( ZY_BQYZ.ZYH = ZY_BRRY.ZYH )

AND ( ZY_BRRY.CYPB = 0 )

AND ( ZY_BQYZ.SRKS = :al_hsql )

AND ( ZY_BQYZ.SYBZ = 0 )

AND ( ZY_BQYZ.LSBZ = 0 OR ZY_BQYZ.LSBZ = 2 )

AND ( ZY_BQYZ.QRSJ < :ad_today OR ( ZY_BQYZ.QRSJ IS NULL ) )

AND ( ZY_BQYZ.JFBZ = 2 OR ZY_BQYZ.JFBZ = 9 )

AND ( ZY_BQYZ.XMLX > 3 )

AND ( ZY_BQYZ.YZPB = 0 )

ORDER BY ZY_BRRY.BRCH

4小结

从以上这些例子可以看出,SQL优化的实质就是在结果正确的前提下,用优化器可以识别的语句,充份利用索引,减少表扫描的1/O 次数,尽量避免表搜索的发生。其实SQL的性能优化是一个复杂的过程,上述这些只是在SQL语句应用时的一种具体实例和平时应用中的总结。总之,数据库的性能优化是一个系统工程,涉及的方面很多。数据库管理员需要综合运用多种方法,认真分析数据库运行过程中出现的各种问题,才能保证数据库高效地运行。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top