CN117453732B - 一种cdss医嘱数据查询优化方法和*** - Google Patents

一种cdss医嘱数据查询优化方法和*** Download PDF

Info

Publication number
CN117453732B
CN117453732B CN202311786746.5A CN202311786746A CN117453732B CN 117453732 B CN117453732 B CN 117453732B CN 202311786746 A CN202311786746 A CN 202311786746A CN 117453732 B CN117453732 B CN 117453732B
Authority
CN
China
Prior art keywords
expression
query
sql query
query statement
rewritten
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311786746.5A
Other languages
English (en)
Other versions
CN117453732A (zh
Inventor
蔡志聪
郭艺鹏
丘斌
***
郑志坤
兰辉英
李程扬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
XIAMEN ZHIYE SOFTWARE ENGINEERING CO LTD
Original Assignee
XIAMEN ZHIYE SOFTWARE ENGINEERING CO LTD
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by XIAMEN ZHIYE SOFTWARE ENGINEERING CO LTD filed Critical XIAMEN ZHIYE SOFTWARE ENGINEERING CO LTD
Priority to CN202311786746.5A priority Critical patent/CN117453732B/zh
Publication of CN117453732A publication Critical patent/CN117453732A/zh
Application granted granted Critical
Publication of CN117453732B publication Critical patent/CN117453732B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • G06F16/2445Data retrieval commands; View definitions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24539Query rewriting; Transformation using cached or materialised query results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/2454Optimisation of common expressions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G16INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
    • G16HHEALTHCARE INFORMATICS, i.e. INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR THE HANDLING OR PROCESSING OF MEDICAL OR HEALTHCARE DATA
    • G16H10/00ICT specially adapted for the handling or processing of patient-related medical or healthcare data
    • G16H10/60ICT specially adapted for the handling or processing of patient-related medical or healthcare data for patient-specific data, e.g. for electronic patient records
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Operations Research (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Epidemiology (AREA)
  • General Health & Medical Sciences (AREA)
  • Medical Informatics (AREA)
  • Primary Health Care (AREA)
  • Public Health (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明给出了一种CDSS医嘱数据查询优化方法和***,通过改写SQL查询语句以及将查询结果缓存过滤,可以把原先需要查询数据库几百上千次的操作,减少到几次,减少了跟数据库的交互次数,减少网络开销,最终减少查询耗时,提升医嘱质控的执行性能,提高了接口的并发数,最大限度的降低了对临床业务的阻塞时长,发挥出CDSS医嘱质控功能在临床辅助决策中的积极作用,减少医疗差错,提升医疗质量。

Description

一种CDSS医嘱数据查询优化方法和***
技术领域
本发明涉及医疗技术领域,尤其是一种CDSS医嘱数据查询优化方法和***。
背景技术
临床决策支持***(Clinical Decision Support System,以下简称CDSS)是促进智慧医院建设发展,满足医院信息化工作需要,具有辅助诊断、医嘱质控、治疗方案推荐等功能,在提升医疗安全和质量等方面具有重要作用。CDSS是通过应用信息技术,综合分析医学知识和患者信息,为医务人员的临床诊疗活动提供多种形式帮助,支持临床决策的一种计算机辅助信息***。
CDSS的医嘱质控功能需要根据患者的病史、诊断、检查、检验、用药等医嘱数据综合判断患者的检查、检验、用药医嘱的合理性。业内通常采用规则引擎技术来实现医嘱质控功能,对涉及患者医嘱数据查询的节点使用SQL语句进行查询,对SQL的查询结果进行缓存以优化规则引擎的执行性能。
现有技术使用SQL语句查询医嘱数据并使用SQL语句的唯一hash值作为缓存的key值来缓存查询结果,以减少相同医嘱查询的查询次数。但是,由于医疗专业的复杂性,单次医嘱质控请求所需执行的质控规则数量可能有数千条、数万条,虽然已经对查询结果进行缓存,但是发送到数据库的医嘱查询次数仍然多达几百上千次,仍然对医嘱质控的执行效率有较大影响。
发明内容
为了解决背景技术所提到的技术问题,本发明提出了一种CDSS医嘱数据查询优化方法和***,以解决上述技术问题。
根据本发明的一个方面,提出了一种CDSS医嘱数据查询优化方法,包括:
S1、获取初始SQL查询语句,对所述初始SQL查询语句进行去噪;
S2、获取实际查询参数值,基于所述实际查询参数值对去噪后的SQL查询语句进行动态SQL解析,以获得根据所述实际查询参数值动态生成的SQL查询语句;
S3、获取医嘱数据表列名,将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,获得改写后的SQL查询语句和查询结果过滤器;其中,所述查询结果过滤器用于按照被改写的条件表达式等效的结果对查询结果进行内存过滤;
S4、基于所述实际查询参数值获取对应改写后的SQL查询语句所需的查询过滤参数,执行改写后的SQL查询语句以获得查询结果;其中,当执行改写后的SQL查询语句时,基于所述改写后的SQL查询语句和所述查询过滤参数从缓存中获取查询结果,若获取不到则基于所述改写后的SQL查询语句和所述查询过滤参数的拼接字符串作为键值,将所述查询结果进行缓存;
S5、基于所述查询结果过滤器对所述查询结果进行过滤,获得与所述初始SQL查询语句等效的查询结果。
在一些具体的实施例中,步骤S1所述初始SQL查询语句包括基于OGNL表达式编写的动态SQL元素,所述动态SQL元素包括if、choose、trim、foreach、bind。以便根据不同的查询条件来生成不同的动态SQL语句,增强查询语句的灵活性。
在一些具体的实施例中,步骤S1具体包括:
S11、将所述初始SQL查询语句中比较运算符包含的空格删除;
S12、将所述初始SQL查询语句中多个空格、空行、换行符、回车符和制表符替换为单个空格字符;
S13、将所述初始SQL查询语句中左括号的空格、右括号前的空格、逗号之后的空格和逗号之前的空格删除。通过对所述初始SQL查询语句进行去噪,避免多个意义完全一致但由于干扰字符的存在而影响SQL查询语句作为缓存键值时的缓存命中率,去噪后可以减少不必要的动态SQL解析和不必要的缓存,提升程序内存有效利用率。
在一些具体的实施例中,步骤S3还包括获取医嘱数据表名称,并基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的SQL查询语句是否需要进行改写。
在一些具体的实施例中,步骤S3所述基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的SQL查询语句是否需要进行改写,具体包括:
S31、判断所述动态生成的SQL查询语句中From表达式后是否为数据表,若是则判断所述数据表的名称是否与所述医嘱数据表名称一致,若一致则判断所述动态生成的SQL查询语句过滤条件中的Where表达式是否为空,若不为空则执行步骤S32;若所述动态生成的SQL查询语句过滤条件中From表达式后不是数据表、所述数据表的名称与所述医嘱数据表名称不一致或所述动态生成的SQL查询语句的Where表达式为空,确定所述动态生成的SQL查询语句不需要进行改写;
S32、判断所述Where表达式中包含的条件表达式的左边节点列名与所述医嘱数据表列名一致的条件表达式出现的次数,若仅出现一次则执行步骤S33,若未出现或出现多次则确定所述动态生成的SQL查询语句不需要进行改写;
S33、获取所述动态生成的SQL查询语句的查询列信息,判断所述查询列信息是否包含所述医嘱数据表列名,若包含则确定所述动态生成的SQL查询语句需要进行改写,若不包含则确定所述动态生成的SQL查询语句不需要进行改写。
在一些具体的实施例中,步骤S3所述将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,具体包括:
S34、获取所述动态生成的SQL查询语句过滤条件中的Where表达式,并将所述Where表达式作为父级条件表达式;
S35、判断所述父级条件表达式的表达式树右边节点是否为比较表达式或Like表达式,若是则判断所述比较表达式或Like表达式的左边节点是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的SQL查询语句,若不一致则继续执行步骤S36;
S36、判断所述父级条件表达式的表达式树右边节点是否为In表达式,若是则判断所述In表达式左边节点的列名是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的SQL查询语句,若不一致则继续执行步骤S37;
S37、判断所述父级条件表达式的表达式树左边节点是否为二元表达式,若是则将所述父级条件表达式的表达式树左边节点作为新的父级条件表达式,基于所述医嘱数据表列名重复执行步骤S35-S37。递归查找SQL查询语句过滤条件中满足改写条件的条件表达式,以对SQL查询语句进行改写,从而合并同类医嘱数据查询请求,提升医嘱质控的执行性能。
在一些具体的实施例中,步骤S3所述比较表达式包括等于、不等于、大于、大于等于、小于和小于等于操作符,所述Like表达式包括Like操作符,所述In表达式包括In操作符。
在一些具体的实施例中,步骤S3所述查询结果过滤器基于改写后的SQL查询语句中被改写的条件表达式进行判断,获取对应被改写的条件表达式的比较表达式过滤器、Like表达式过滤器和In表达式过滤器。
根据本发明的第二方面,提出了一种CDSS医嘱数据查询优化***,该***包括:
去噪模块,被配置用于获取初始SQL查询语句,对所述初始SQL查询语句进行去噪;
解析模块,被配置用于获取实际查询参数值,基于所述实际查询参数值对去噪后的SQL查询语句进行动态SQL解析,以获得根据所述实际查询参数值动态生成的SQL查询语句;
改写模块,被配置用于获取医嘱数据表列名,将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,获得改写后的SQL查询语句和查询结果过滤器;其中,所述查询结果过滤器用于按照被改写的条件表达式等效的结果对查询结果进行内存过滤;
执行模块,被配置用于基于所述实际查询参数值获取对应改写后的SQL查询语句所需的查询过滤参数,执行改写后的SQL查询语句以获得查询结果;其中,当执行改写后的SQL查询语句时,基于所述改写后的SQL查询语句和所述查询过滤参数从缓存中获取查询结果,若获取不到则基于所述改写后的SQL查询语句和所述查询过滤参数的拼接字符串作为键值,将所述查询结果进行缓存;
过滤模块,被配置用于基于所述查询结果过滤器对所述查询结果进行过滤,获得与所述初始SQL查询语句等效的查询结果。
根据本发明的第三方面,提出了一种计算机可读存储介质,其上存储有一或多个计算机程序,该一或多个计算机程序被计算机处理器执行时实施上述任一项的方法。
本发明提出了一种CDSS医嘱数据查询优化方法和***,通过改写SQL查询语句以及将查询结果缓存过滤,可以把原先需要查询数据库几百上千次的操作,减少到几次,减少了跟数据库的交互次数,减少网络开销,最终减少查询耗时,提升医嘱质控的执行性能,提高了接口的并发数,最大限度的降低了对临床业务的阻塞时长,发挥出CDSS医嘱质控功能在临床辅助决策中的积极作用,减少医疗差错,提升医疗质量。
附图说明
包括附图以提供对实施例的进一步理解并且附图被并入本说明书中并且构成本说明书的一部分。附图图示了实施例并且与描述一起用于解释本发明的原理。将容易认识到其它实施例和实施例的很多预期优点,因为通过引用以下详细描述,它们变得被更好地理解。通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请的一个实施例的一种CDSS医嘱数据查询优化方法的流程图;
图2是本申请的一个实施例的Where表达式的表达式树示意图;
图3是本申请的一个实施例的医嘱数据优化前查询次数示意图;
图4是本申请的一个实施例的医嘱数据优化后查询次数示意图;
图5是本申请的一个实施例的一种CDSS医嘱数据查询优化***的框架图;
图6是适于用来实现本申请实施例的电子设备的计算机***的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
根据本申请的一个实施例的一种CDSS医嘱数据查询优化方法,图1是本申请的一个实施例的一种CDSS医嘱数据查询优化方法的流程图,如图1所示,该方法包括:
S1、获取初始SQL查询语句,对所述初始SQL查询语句进行去噪;
其中,初始SQL查询语句包括基于OGNL表达式编写的动态SQL元素,所述动态SQL元素包括if、choose、trim、foreach、bind。以便根据不同的查询条件来生成不同的动态SQL语句,增强查询语句的灵活性。
其中,步骤S1具体包括:
S11、将所述初始SQL查询语句中比较运算符包含的空格删除;该比较运算符号包括小于等于(<=)、大于等于(>=)、不等于(<>或!=);
S12、将所述初始SQL查询语句中多个空格、空行、换行符、回车符和制表符替换为单个空格字符;
S13、将所述初始SQL查询语句中左括号的空格、右括号前的空格、逗号之后的空格和逗号之前的空格删除。通过对所述初始SQL查询语句进行去噪,避免多个意义完全一致但由于干扰字符的存在而影响SQL查询语句作为缓存键值时的缓存命中率,去噪后可以减少不必要的动态SQL解析和不必要的缓存,提升程序内存有效利用率。
S2、获取实际查询参数值,基于所述实际查询参数值对去噪后的SQL查询语句进行动态SQL解析,以获得根据所述实际查询参数值动态生成的SQL查询语句;
其中,动态SQL解析包括基于Mybatis对应的接口获取与去噪后的SQL查询语句对应的SQL源对象(SqlSource对象),通过实际查询参数值与该SQL源对象绑定即可获得包含实际查询参数值的对象(BoundSql对象),通过该对象可获取动态生成的SQL查询语句,并且该对象可便于后续对SQL查询语句进行改写操作。
在一些具体的实施例中,步骤S2还包括以去噪后的SQL查询语句为键值,将SQL源对象(SqlSource对象)进行缓存;待下次查询时可直接通过去噪后的SQL查询语句获取SQL源对象(SqlSource对象),基于SQL源对象(SqlSource对象)进行解析,从而减少动态SQL解析耗时。
S3、获取医嘱数据表列名,将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,获得改写后的SQL查询语句和查询结果过滤器;其中,所述查询结果过滤器用于按照被改写的条件表达式等效的结果对查询结果进行内存过滤;
需要说明的是,步骤S3可通过jsqlparser中的CCJSqlParserUtil工具类的parse方法对所述动态生成的SQL查询语句进行解析,并转换为PlainSelect对象,通过转换为PlainSelect对象可以获取更详细的查询信息,以便进行更精确的控制和优化,即可基于PlainSelect对象获取SQL查询语句中的From表达式和Where表达式片段。
其中,步骤S3还包括获取医嘱数据表名称,并基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的SQL查询语句是否需要进行改写。
具体包括以下步骤:
S31、判断所述动态生成的SQL查询语句中From表达式后是否为数据表,若是则判断所述数据表的名称是否与所述医嘱数据表名称一致,若一致则判断所述动态生成的SQL查询语句过滤条件中的Where表达式是否为空,若不为空则执行步骤S32;若所述动态生成的SQL查询语句过滤条件中From表达式后不是数据表、所述数据表的名称与所述医嘱数据表名称不一致或所述动态生成的SQL查询语句的Where表达式为空,确定所述动态生成的SQL查询语句不需要进行改写;
S32、判断所述Where表达式中包含的条件表达式的左边节点列名与所述医嘱数据表列名一致的条件表达式出现的次数,若仅出现一次则执行步骤S33,若未出现或出现多次则确定所述动态生成的SQL查询语句不需要进行改写;
其中,若所述Where表达式中包含的条件表达式的左边节点列名与所述医嘱数据表列名一致的条件表达式出现的次数过多,即表示SQL查询语句的查询条件更复杂,可能导致后续内存过滤后获取的查询结果与所述初始SQL查询语句直接在数据库中获取的查询结果有偏差,故为避免这个问题,确定动态生成的SQL查询语句不需要进行改写。
S33、获取所述动态生成的SQL查询语句的查询列信息,判断所述查询列信息是否包含所述医嘱数据表列名,若包含则确定所述动态生成的SQL查询语句需要进行改写,若不包含则确定所述动态生成的SQL查询语句不需要进行改写。通过步骤S31-S33的判断可以筛选出需要进行改写的SQL查询语句。
其中,步骤S3“将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,获得改写后的SQL查询语句和查询结果过滤器”具体包括:
S34、获取所述动态生成的SQL查询语句过滤条件中的Where表达式,并将所述Where表达式作为父级条件表达式;
S35、判断所述父级条件表达式的表达式树右边节点是否为比较表达式或Like表达式,若是则判断所述比较表达式或Like表达式的左边节点是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的SQL查询语句,若不一致则继续执行步骤S36;
其中,步骤S3所述比较表达式包括等于、不等于、大于、大于等于、小于和小于等于操作符,所以比较表达式涵盖等于、不等于、大于、大于等于、小于、小于等于这6种比较表达式,而Like表达式包括Like操作符,In表达式包括In操作符。
S36、判断所述父级条件表达式的表达式树右边节点是否为In表达式,若是则判断所述In表达式左边节点的列名是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的SQL查询语句,若不一致则继续执行步骤S37;
S37、判断所述父级条件表达式的表达式树左边节点是否为二元表达式,若是则将所述父级条件表达式的表达式树左边节点作为新的父级条件表达式,基于所述医嘱数据表列名重复执行步骤S35-S37。
其中,步骤S34-S37是通过递归查找满足改写条件的条件表达式,以将SQL查询语句的过滤条件中对应条件表达式改写为1 = 1,减少同类医嘱数据查询请求因医嘱名称不一致而重复执行查询请求。同类医嘱查询请求,例如多个医嘱查询请求,它们之间除了查询的医嘱名称不一样之外,其他条件都一样,这时候把医嘱名称这个查询条件替换成1=1,后续可执行改写后的SQL查询语句以查询出这个就诊人满足其他条件的所有结果,放到缓存***里,在内存里过滤各个查询语法所需的结果。
作为示例,图2是本申请的一个实施例的Where表达式的表达式树示意图,以图2中的以Where表达式作为父级表达式,医嘱数据表列名为“医嘱名称”,首先通过步骤S35先判断Where表达式的表达式树右边节点(“类型=’检查’”)是否为比较表达式,可以看到,该右边节点为比较表达式,但是该比较表达式的左边节点为“类型”,与医嘱数据表列名“医嘱名称”不同,接着执行步骤S36判断右边节点(“类型=’检查’”)是否为In表达式,很明显不是In表达式,则执行步骤S37判断左边节点(“AND”)是否为二元表达式,可以看到,此时父级表达式的左边节点为二元表达式,所以将左边节点(“AND”)作为新的父级表达式,继续执行步骤S35-S37,直至新的父级表达式的右边节点为(“医嘱名称=’CT’”),该右边节点为比较表达式,且该比较表达式的左边节点为“医嘱名称”,与医嘱数据表列名相同,则将当前父级表达式的右边节点(“医嘱名称=’CT’”)改写为1=1,结束改写,并获取比较表达式(“医嘱名称=’CT’”),该比较表达式(“医嘱名称=’CT’”)即为被改写的对应条件表达式。
在一些具体的实施例中,查询结果过滤器用于按照被改写的条件表达式等效的结果对查询结果进行内存过滤,基于改写后的SQL查询语句中被改写的条件表达式进行判断,获取对应被改写的条件表达式的比较表达式过滤器(EqualsToFilter与其他相关比较的过滤器)、Like表达式过滤器(LikeFilter)和In表达式过滤器(InFilter)。其中比较表达式过滤器、Like过滤器和In过滤器通过继承QueryResultFilter基类可实现,也可进一步扩展其他过滤器。以图2作为示例来说,执行S35-S37的查询条件改写步骤后,原先查询语句的过滤条件中对应条件表达式(“医嘱名称=’CT’”)会被改写为1 = 1,并获取(“医嘱名称=’CT’”)这个被改写的对应条件表达式。查询结果过滤器基于被改写的条件表达式判断获取,例如图2示例返回的是EqualsToFilter过滤器。
其中,EqualsToFilter实现与(“医嘱名称=’CT’”)表达式相同的效果的内存过滤操作,即对改写后的查询结果列表,进行循环判断,获取其中医嘱名称等于CT的记录。
进一步的,假设改写返回的过滤条件表达式是(“医嘱名称 LIKE ’%CT%’”),即获得Like过滤器(LikeFilter),而对应的Like过滤器(LikeFilter)实现的功能也是对改写后的查询结果列表,进行循环判断,获取其中医嘱名称包含CT的记录。其他过滤器实现方式与上述示例类似。
S4、基于所述实际查询参数值获取对应改写后的SQL查询语句所需的查询过滤参数,执行改写后的SQL查询语句以获得查询结果;其中,当执行改写后的SQL查询语句时,基于所述改写后的SQL查询语句和所述查询过滤参数从缓存中获取查询结果,若获取不到则基于所述改写后的SQL查询语句和所述查询过滤参数的拼接字符串作为键值,将所述查询结果进行缓存;
S5、基于所述查询结果过滤器对所述查询结果进行过滤,获得与所述初始SQL查询语句等效的查询结果。通过改写SQL查询语句(步骤S3)和查询结果缓存过滤(步骤S4-S5),可以把原先需要查询数据库几百上千次的操作,减少到几次,减少了跟数据库的交互次数,减少网络开销,最终减少查询耗时,提升医嘱质控的执行性能,提高了接口的并发数,最大限度的降低了对临床业务的阻塞时长,发挥出CDSS医嘱质控功能在临床辅助决策中的积极作用,减少医疗差错,提升医疗质量。
为了突出本申请的技术效果,图3和图4是利用本申请方法进行医嘱数据查询优化前后的对比,对同一SQL查询使用缓存,以某次医嘱质控请求为例,涉及医嘱的查询次数有872次(queryCount)。
如图3,查询优化前执行859次医嘱查询(executeCount),缓存命中13次,请求总耗时超过10秒(Time);
如图4,查询优化后执行2次医嘱查询(executeCount),缓存命中870次,请求总耗时约2.8秒(Time);
通过此案例优化前后对比可以看出,经过医嘱查询优化,能够大幅减少重复的同类请求,提升医嘱质控的执行性能。
下面参考图5,图5是本申请的一个实施例的医嘱数据查询优化示意图,如图5所示,该***包括去噪模块501,被配置用于获取初始SQL查询语句,对所述初始SQL查询语句进行去噪;解析模块502,被配置用于获取实际查询参数值,基于所述实际查询参数值对去噪后的SQL查询语句进行动态SQL解析,以获得根据所述实际查询参数值动态生成的SQL查询语句;改写模块503,被配置用于获取医嘱数据表列名,将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,获得改写后的SQL查询语句和查询结果过滤器;其中,所述查询结果过滤器用于按照被改写的条件表达式等效的结果对查询结果进行内存过滤;执行模块504,被配置用于基于所述实际查询参数值获取对应改写后的SQL查询语句所需的查询过滤参数,执行改写后的SQL查询语句以获得查询结果;其中,当执行改写后的SQL查询语句时,基于所述改写后的SQL查询语句和所述查询过滤参数从缓存中获取查询结果,若获取不到则基于所述改写后的SQL查询语句和所述查询过滤参数的拼接字符串作为键值,将所述查询结果进行缓存;过滤模块505,被配置用于基于所述查询结果过滤器对所述查询结果进行过滤,获得与所述初始SQL查询语句等效的查询结果。
下面参考图6,其示出了适于用来实现本申请实施例的电子设备的计算机***600的结构示意图。图6示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,计算机***600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有***600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请的计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读存储介质,该计算机可读存储介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。
作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取初始SQL查询语句,对所述初始SQL查询语句进行去噪;获取实际查询参数值,基于所述实际查询参数值对去噪后的SQL查询语句进行动态SQL解析,以获得根据所述实际查询参数值动态生成的SQL查询语句;获取医嘱数据表列名,将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,获得改写后的SQL查询语句和查询结果过滤器;其中,所述查询结果过滤器用于按照被改写的条件表达式等效的结果对查询结果进行内存过滤;基于所述实际查询参数值获取对应改写后的SQL查询语句所需的查询过滤参数,执行改写后的SQL查询语句以获得查询结果;其中,当执行改写后的SQL查询语句时,基于所述改写后的SQL查询语句和所述查询过滤参数从缓存中获取查询结果,若获取不到则基于所述改写后的SQL查询语句和所述查询过滤参数的拼接字符串作为键值,将所述查询结果进行缓存;基于所述查询结果过滤器对所述查询结果进行过滤,获得与所述初始SQL查询语句等效的查询结果。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (9)

1.一种CDSS医嘱数据查询优化方法,其特征在于,包括:
S1、获取初始SQL查询语句,对所述初始SQL查询语句进行去噪;
S2、获取实际查询参数值,基于所述实际查询参数值对去噪后的SQL查询语句进行动态SQL解析,以获得根据所述实际查询参数值动态生成的SQL查询语句;
S3、获取医嘱数据表列名,将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,获得改写后的SQL查询语句和查询结果过滤器;其中,所述查询结果过滤器用于按照被改写的条件表达式等效的结果对查询结果进行内存过滤;
所述将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,包括:
S34、获取所述动态生成的SQL查询语句过滤条件中的Where表达式,并将所述Where表达式作为父级条件表达式;
S35、判断所述父级条件表达式的表达式树右边节点是否为比较表达式或Like表达式,若是则判断所述比较表达式或Like表达式的左边节点是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的SQL查询语句,若不一致则继续执行步骤S36;
S36、判断所述父级条件表达式的表达式树右边节点是否为In表达式,若是则判断所述In表达式左边节点的列名是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的SQL查询语句,若不一致则继续执行步骤S37;
S37、判断所述父级条件表达式的表达式树左边节点是否为二元表达式,若是则将所述父级条件表达式的表达式树左边节点作为新的父级条件表达式,基于所述医嘱数据表列名重复执行步骤S35-S37;S4、基于所述实际查询参数值获取对应改写后的SQL查询语句所需的查询过滤参数,执行改写后的SQL查询语句以获得查询结果;其中,当执行改写后的SQL查询语句时,基于所述改写后的SQL查询语句和所述查询过滤参数从缓存中获取查询结果,若获取不到则基于所述改写后的SQL查询语句和所述查询过滤参数的拼接字符串作为键值,将所述查询结果进行缓存;
S5、基于所述查询结果过滤器对所述查询结果进行过滤,获得与所述初始SQL查询语句等效的查询结果。
2.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S1所述初始SQL查询语句包括基于OGNL表达式编写的动态SQL元素,所述动态SQL元素包括if、choose、trim、foreach、bind。
3.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S1具体包括:
S11、将所述初始SQL查询语句中比较运算符包含的空格删除;
S12、将所述初始SQL查询语句中多个空格、空行、换行符、回车符和制表符替换为单个空格字符;
S13、将所述初始SQL查询语句中左括号的空格、右括号前的空格、逗号之后的空格和逗号之前的空格删除。
4.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S3还包括获取医嘱数据表名称,并基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的SQL查询语句是否需要进行改写。
5.根据权利要求4所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S3所述基于所述医嘱数据表名称和所述医嘱数据表列名判断所述动态生成的SQL查询语句是否需要进行改写,具体包括:
S31、判断所述动态生成的SQL查询语句中From表达式后是否为数据表,若是则判断所述数据表的名称是否与所述医嘱数据表名称一致,若一致则判断所述动态生成的SQL查询语句过滤条件中的Where表达式是否为空,若不为空则执行步骤S32;若所述动态生成的SQL查询语句过滤条件中From表达式后不是数据表、所述数据表的名称与所述医嘱数据表名称不一致或所述动态生成的SQL查询语句的Where表达式为空,确定所述动态生成的SQL查询语句不需要进行改写;
S32、判断所述Where表达式中包含的条件表达式的左边节点列名与所述医嘱数据表列名一致的条件表达式出现的次数,若仅出现一次则执行步骤S33,若未出现或出现多次则确定所述动态生成的SQL查询语句不需要进行改写;
S33、获取所述动态生成的SQL查询语句的查询列信息,判断所述查询列信息是否包含所述医嘱数据表列名,若包含则确定所述动态生成的SQL查询语句需要进行改写,若不包含则确定所述动态生成的SQL查询语句不需要进行改写。
6.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S3所述比较表达式包括等于、不等于、大于、大于等于、小于和小于等于操作符,所述Like表达式包括Like操作符,所述In表达式包括In操作符。
7.根据权利要求1所述的一种CDSS医嘱数据查询优化方法,其特征在于,步骤S3所述查询结果过滤器基于改写后的SQL查询语句中被改写的条件表达式进行判断,获取对应被改写的条件表达式的比较表达式过滤器、Like表达式过滤器和In表达式过滤器。
8.一种CDSS医嘱数据查询优化***,其特征在于,所述***包括:
去噪模块,被配置用于获取初始SQL查询语句,对所述初始SQL查询语句进行去噪;
解析模块,被配置用于获取实际查询参数值,基于所述实际查询参数值对去噪后的SQL查询语句进行动态SQL解析,以获得根据所述实际查询参数值动态生成的SQL查询语句;
改写模块,被配置用于获取医嘱数据表列名,将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,获得改写后的SQL查询语句和查询结果过滤器;其中,所述查询结果过滤器用于按照被改写的条件表达式等效的结果对查询结果进行内存过滤;所述将动态生成的SQL查询语句过滤条件中包含所述医嘱数据表列名的对应条件表达式改写为1=1,包括:S34、获取所述动态生成的SQL查询语句过滤条件中的Where表达式,并将所述Where表达式作为父级条件表达式;S35、判断所述父级条件表达式的表达式树右边节点是否为比较表达式或Like表达式,若是则判断所述比较表达式或Like表达式的左边节点是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的SQL查询语句,若不一致则继续执行步骤S36;S36、判断所述父级条件表达式的表达式树右边节点是否为In表达式,若是则判断所述In表达式左边节点的列名是否与所述医嘱数据表列名一致,若一致则将所述父级条件表达式的表达式树右边节点改写为1=1,以获得改写后的SQL查询语句,若不一致则继续执行步骤S37;S37、判断所述父级条件表达式的表达式树左边节点是否为二元表达式,若是则将所述父级条件表达式的表达式树左边节点作为新的父级条件表达式,基于所述医嘱数据表列名重复执行步骤S35-S37;
执行模块,被配置用于基于所述实际查询参数值获取对应改写后的SQL查询语句所需的查询过滤参数,执行改写后的SQL查询语句以获得查询结果;其中,当执行改写后的SQL查询语句时,基于所述改写后的SQL查询语句和所述查询过滤参数从缓存中获取查询结果,若获取不到则基于所述改写后的SQL查询语句和所述查询过滤参数的拼接字符串作为键值,将所述查询结果进行缓存;
过滤模块,被配置用于基于所述查询结果过滤器对所述查询结果进行过滤,获得与所述初始SQL查询语句等效的查询结果。
9.一种计算机可读存储介质,其上存储有一或多个计算机程序,其特征在于,该一或多个计算机程序被计算机处理器执行时实施权利要求1至7任一项所述的方法。
CN202311786746.5A 2023-12-25 2023-12-25 一种cdss医嘱数据查询优化方法和*** Active CN117453732B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311786746.5A CN117453732B (zh) 2023-12-25 2023-12-25 一种cdss医嘱数据查询优化方法和***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311786746.5A CN117453732B (zh) 2023-12-25 2023-12-25 一种cdss医嘱数据查询优化方法和***

Publications (2)

Publication Number Publication Date
CN117453732A CN117453732A (zh) 2024-01-26
CN117453732B true CN117453732B (zh) 2024-03-01

Family

ID=89593284

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311786746.5A Active CN117453732B (zh) 2023-12-25 2023-12-25 一种cdss医嘱数据查询优化方法和***

Country Status (1)

Country Link
CN (1) CN117453732B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117854671B (zh) * 2024-03-05 2024-05-28 智业软件股份有限公司 一种快速计算首日或末日医嘱执行次数的方法和***

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107038222A (zh) * 2017-03-24 2017-08-11 福建天泉教育科技有限公司 数据库缓存实现方法及其***
CN113434529A (zh) * 2021-06-22 2021-09-24 青岛海尔科技有限公司 业务数据查询方法、装置、存储介质、处理器及电子设备
WO2021213160A1 (zh) * 2020-11-27 2021-10-28 平安科技(深圳)有限公司 基于图神经网络的医疗查询方法、装置、计算机设备及存储介质
CN114036178A (zh) * 2021-11-05 2022-02-11 深圳创维智慧科技有限公司 服务接口生成方法、装置、计算机及可读存储介质
CA3132004A1 (en) * 2020-09-29 2022-03-29 10353744 Canada Ltd. Sql query optimization method and device
CN116186079A (zh) * 2023-04-27 2023-05-30 江苏博云科技股份有限公司 一种sql批量查询自动改写和优化方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107038222A (zh) * 2017-03-24 2017-08-11 福建天泉教育科技有限公司 数据库缓存实现方法及其***
CA3132004A1 (en) * 2020-09-29 2022-03-29 10353744 Canada Ltd. Sql query optimization method and device
WO2021213160A1 (zh) * 2020-11-27 2021-10-28 平安科技(深圳)有限公司 基于图神经网络的医疗查询方法、装置、计算机设备及存储介质
CN113434529A (zh) * 2021-06-22 2021-09-24 青岛海尔科技有限公司 业务数据查询方法、装置、存储介质、处理器及电子设备
CN114036178A (zh) * 2021-11-05 2022-02-11 深圳创维智慧科技有限公司 服务接口生成方法、装置、计算机及可读存储介质
CN116186079A (zh) * 2023-04-27 2023-05-30 江苏博云科技股份有限公司 一种sql批量查询自动改写和优化方法

Also Published As

Publication number Publication date
CN117453732A (zh) 2024-01-26

Similar Documents

Publication Publication Date Title
CN110196861B (zh) 一种数据脱敏方法和装置
CN117453732B (zh) 一种cdss医嘱数据查询优化方法和***
US7167848B2 (en) Generating a hierarchical plain-text execution plan from a database query
US9305044B2 (en) System and method for modelling data
CN113032362B (zh) 数据血缘分析方法、装置、电子设备和存储介质
JP5791149B2 (ja) データベース・クエリ最適化のためのコンピュータで実装される方法、コンピュータ・プログラム、およびデータ処理システム
JP2020501267A (ja) 電子医療レコードからの自動的な知識ベースの特徴抽出
KR20050059216A (ko) 전역 쿼리 상관 관계 속성 제공 방법 및 시스템
CN111078729B (zh) 医疗数据溯源方法、装置、***、存储介质以及电子设备
CN110990420A (zh) 数据查询方法、装置
CN110688544A (zh) 一种查询数据库的方法、设备及存储介质
US9122732B2 (en) Data comparison system
CN115543402B (zh) 一种基于代码提交的软件知识图谱增量更新方法
US8538976B2 (en) Abstract data model extension through managed physical statement structures
US11062048B1 (en) Data structure that facilitates digital rights management
CN111782738B (zh) 构建数据仓库表级别血缘关系的方法及装置
US10719424B1 (en) Compositional string analysis
US20170337197A1 (en) Rule management system and method
CN113343036B (zh) 基于关键拓扑结构分析的数据血缘关系解析方法和***
US10558640B2 (en) Dynamically adding custom data definition language syntax to a database management system
US11568060B2 (en) Modular taint analysis with access paths
Balhoff et al. Ubergraph: integrating OBO ontologies into a unified semantic graph
US10949336B2 (en) Path-sensitive static analysis
CN108629003B (zh) 内容加载方法与装置
CN113312053A (zh) 一种数据处理的方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant