System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及医疗,尤其是一种cdss医嘱数据查询优化方法和系统。
技术介绍
1、临床决策支持系统(clinical decision support system,以下简称cdss)是促进智慧医院建设发展,满足医院信息化工作需要,具有辅助诊断、医嘱质控、治疗方案推荐等功能,在提升医疗安全和质量等方面具有重要作用。cdss是通过应用信息技术,综合分析医学知识和患者信息,为医务人员的临床诊疗活动提供多种形式帮助,支持临床决策的一种计算机辅助信息系统。
2、cdss的医嘱质控功能需要根据患者的病史、诊断、检查、检验、用药等医嘱数据综合判断患者的检查、检验、用药医嘱的合理性。业内通常采用规则引擎技术来实现医嘱质控功能,对涉及患者医嘱数据查询的节点使用sql语句进行查询,对sql的查询结果进行缓存以优化规则引擎的执行性能。
3、现有技术使用sql语句查询医嘱数据并使用sql语句的唯一hash值作为缓存的key值来缓存查询结果,以减少相同医嘱查询的查询次数。但是,由于医疗专业的复杂性,单次医嘱质控请求所需执行的质控规则数量可能有数千条、数万条,虽然已经对查询结果进行缓存,但是发送到数据库的医嘱查询次数仍然多达几百上千次,仍然对医嘱质控的执行效率有较大影响。
技术实现思路
1、为了解决
技术介绍
所提到的技术问题,本专利技术提出了一种cdss医嘱数据查询优化方法和系统,以解决上述技术问题。
2、根据本专利技术的一个方面,提出了一种cdss医嘱数据查询优化方法,包
3、s1、获取初始sql查询语句,对所述初始sql查询语句进行去噪;
4、s2、获取实际查询参数值,基于所述实际查询参数值对去噪后的sql查询语句进行动态sql解析,以获得根据所述实际查询参数值动态生成的sql查询语句;
5、s3、获取医嘱数据表列名,将动态生成的sql查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,获得改写后的sql查询语句和查询结果过滤器;其中,所述查询结果过滤器用于按照被改写的条件表达式等效的结果对查询结果进行内存过滤;
6、s4、基于所述实际查询参数值获取对应改写后的sql查询语句所需的查询过滤参数,执行改写后的sql查询语句以获得查询结果;其中,当执行改写后的sql查询语句时,基于所述改写后的sql查询语句和所述查询过滤参数从缓存中获取查询结果,若获取不到则基于所述改写后的sql查询语句和所述查询过滤参数的拼接字符串作为键值,将所述查询结果进行缓存;
7、s5、基于所述查询结果过滤器对所述查询结果进行过滤,获得与所述初始sql查询语句等效的查询结果。
8、在一些具体的实施例中,步骤s1所述初始sql查询语句包括基于ognl表达式编写的动态sql元素,所述动态sql元素包括if、choose、trim、foreach、bind。以便根据不同的查询条件来生成不同的动态sql语句,增强查询语句的灵活性。
9、在一些具体的实施例中,步骤s1具体包括:
10、s11、将所述初始sql查询语句中比较运算符包含的空格删除;
11、s12、将所述初始sql查询语句中多个空格、空行、换行符、回车符和制表符替换为单个空格字符;
12、s13、将所述初始sql查询语句中左括号的空格、右括号前的空格、逗号之后的空格和逗号之前的空格删除。通过对所述初始sql查询语句进行去噪,避免多个意义完全一致但由于干扰字符的存在而影响sql查询语句作为缓存键值时的缓存命中率,去噪后可以减少不必要的动态sql解析和不必要的缓存,提升程序内存有效利用率。
13、在一些具体的实施例中,步骤s3还包括获取医嘱数据表名称,并基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的sql查询语句是否需要进行改写。
14、在一些具体的实施例中,步骤s3所述基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的sql查询语句是否需要进行改写,具体包括:
15、s31、判断所述动态生成的sql查询语句中from表达式后是否为数据表,若是则判断所述数据表的名称是否与所述医嘱数据表名称一致,若一致则判断所述动态生成的sql查询语句过滤条件中的where表达式是否为空,若不为空则执行步骤s32;若所述动态生成的sql查询语句过滤条件中from表达式后不是数据表、所述数据表的名称与所述医嘱数据表名称不一致或所述动态生成的sql查询语句的where表达式为空,确定所述动态生成的sql查询语句不需要进行改写;
16、s32、判断所述where表达式中包含的条件表达式的左边节点列名与所述医嘱数据表列名一致的条件表达式出现的次数,若仅出现一次则执行步骤s33,若未出现或出现多次则确定所述动态生成的sql查询语句不需要进行改写;
17、s33、获取所述动态生成的sql查询语句的查询列信息,判断所述查询列信息是否包含所述医嘱数据表列名,若包含则确定所述动态生成的sql查询语句需要进行改写,若不包含则确定所述动态生成的sql查询语句不需要进行改写。
18、在一些具体的实施例中,步骤s3所述将动态生成的sql查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,具体包括:
19、s34、获取所述动态生成的sql查询语句过滤条件中的where表达式,并将所述where表达式作为父级条件表达式;
20、s35、判断所述父级条件表达式的表达式树右边节点是否为比较表达式或like表达式,若是则判断所述比较表达式或like表达式的左边节点是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的sql查询语句,若不一致则继续执行步骤s36;
21、s36、判断所述父级条件表达式的表达式树右边节点是否为in表达式,若是则判断所述in表达式左边节点的列名是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的sql查询语句,若不一致则继续执行步骤s37;
22、s37、判断所述父级条件表达式的表达式树左边节点是否为二元表达式,若是则将所述父级条件表达式的表达式树左边节点作为新的父级条件表达式,基于所述医嘱数据表列名重复执行步骤s35-s37。递归查找sql查询语句过滤条件中满足改写条件的条件表达式,以对sql查询语句进行改写,从而合并同类医嘱数据查询请求,提升医嘱质控的执行性能。
23、在一些具体的实施例中,步骤s3所述比较表达式包括等于、不等于、大于、大于等于、小于和小于等于操作符,所述like表达式包括like操作符,所述in表达式包括in操作符。
24、在一些具体的实施例中,步骤s3所述查询结果过滤器基于改写后的sql查询语句中被改写的条件表达式进行判断,获取对应被改写的条件表达式的比较表达式过滤器、l本文档来自技高网...
【技术保护点】
1.一种CDSS医嘱数据查询优化方法,其特征在于,包括:
2.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S1所述初始SQL查询语句包括基于OGNL表达式编写的动态SQL元素,所述动态SQL元素包括if、choose、trim、foreach、bind。
3.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S1具体包括:
4.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S3还包括获取医嘱数据表名称,并基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的SQL查询语句是否需要进行改写。
5.根据权利要求4所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S3所述基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的SQL查询语句是否需要进行改写,具体包括:
6.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S3所述将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,具体包
7.根据权利要求6所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S3所述比较表达式包括等于、不等于、大于、大于等于、小于和小于等于操作符,所述Like表达式包括Like操作符,所述In表达式包括In操作符。
8.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S3所述查询结果过滤器基于改写后的SQL查询语句中被改写的条件表达式进行判断,获取对应被改写的条件表达式的比较表达式过滤器、Like表达式过滤器和In表达式过滤器。
9.一种CDSS医嘱数据查询优化系统,其特征在于,所述系统包括:
10.一种计算机可读存储介质,其上存储有一或多个计算机程序,其特征在于,该一或多个计算机程序被计算机处理器执行时实施权利要求1至8任一项所述的方法。
...【技术特征摘要】
1.一种cdss医嘱数据查询优化方法,其特征在于,包括:
2.根据权利要求1所述的一种cdss医嘱数据查询优化方法,其特征在于,步骤s1所述初始sql查询语句包括基于ognl表达式编写的动态sql元素,所述动态sql元素包括if、choose、trim、foreach、bind。
3.根据权利要求1所述的一种cdss医嘱数据查询优化方法,其特征在于,步骤s1具体包括:
4.根据权利要求1所述的一种cdss医嘱数据查询优化方法,其特征在于,步骤s3还包括获取医嘱数据表名称,并基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的sql查询语句是否需要进行改写。
5.根据权利要求4所述的一种cdss医嘱数据查询优化方法,其特征在于,步骤s3所述基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的sql查询语句是否需要进行改写,具体包括:
6.根据权利要求1所述的一种cdss医嘱数...
【专利技术属性】
技术研发人员:蔡志聪,郭艺鹏,丘斌,刘志军,郑志坤,兰辉英,李程扬,
申请(专利权)人:智业软件股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。