CN111324607B - Sql语句复用方法和装置 - Google Patents

Sql语句复用方法和装置 Download PDF

Info

Publication number
CN111324607B
CN111324607B CN202010079747.6A CN202010079747A CN111324607B CN 111324607 B CN111324607 B CN 111324607B CN 202010079747 A CN202010079747 A CN 202010079747A CN 111324607 B CN111324607 B CN 111324607B
Authority
CN
China
Prior art keywords
record
query
database
sql
statement
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
CN202010079747.6A
Other languages
English (en)
Other versions
CN111324607A (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.)
Yusur Technology Co ltd
Original Assignee
Yusur Technology 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 Yusur Technology Co ltd filed Critical Yusur Technology Co ltd
Priority to CN202010079747.6A priority Critical patent/CN111324607B/zh
Publication of CN111324607A publication Critical patent/CN111324607A/zh
Application granted granted Critical
Publication of CN111324607B publication Critical patent/CN111324607B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种SQL语句复用方法和装置,该方法包括以下步骤:接收并分析SQL语句;在接收的SQL语句为查询语句的情况下,确定预先存储的记录表中是否存在所述SQL语句的执行结果,如果有则从所述记录表中取出执行结果,如果没有则执行所述SQL语句并将执行结果记录到所述记录表中。本发明实施例的SQL语句复用方法和装置,相对于现有数据库的查询操作,可以对指定的数据库表进行记录,可不必执行重复的查询操作,在不与数据库交互的情况下就可获取到查询结果,大大缩短了查询时间,并大大增加了灵活性。

Description

SQL语句复用方法和装置
技术领域
本发明涉及数据库查询技术领域,尤其涉及一种SQL语句复用方法和装置。
背景技术
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。数据库的存储空间很大,可以存放百万条、千万条甚至上亿条数据。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。随着互联网的发展,数据库的重要性越来越明显。数据库的查询操作在实际应用场景中占有举足轻重的地位。
结构化查询语言(SQL:Structured Query Language)是具有数据操纵和数据定义等多种功能的、用于关系数据库管理和数据操作的数据库语言。SQL可用于查询、***、更新和修改数据等。大多数关系数据库都支持SQL。SQL作为一种操作命令集,以其丰富的功能受到业内人士的广泛欢迎,成为提升数据库操作效率的保障。
目前在进行SQL数据库查询时,数据库查询***每执行一次SELECT语句都要对数据库进行查询操作,即便之后的操作没有对表数据进行修改,同样的SELECT语句还是会执行一次,这就导致了时间的浪费。
如何缩短数据库查询时间,成为一个亟待解决的问题。
发明内容
有鉴于此,本发明实施例提供了一种SQL语句复用方法和装置,通过SQL语句的复用来缩短数据库查询时间。
本发明的一个方面,提供了一种SQL语句复用方法,该方法包括以下步骤:接收并解析SQL语句;在接收的SQL语句为查询语句的情况下,确定预先存储的记录表中是否存在所述SQL语句的执行结果,如果存在则从所述记录表中取出执行结果,如果不存在则对数据库执行所述SQL语句并将执行结果记录到所述记录表中。
可选的,所述方法还包括:在所接收的SQL语句为非查询语句的情况下,对数据库执行所接收的SQL语句并获得执行结果,并确定作为非查询语句的所述SQL语句是否涉及修改数据库中目标表的数据,如果涉及修改数据库中目标表的数据,则删除所述记录表中与目标表相关的数据。
可选地,所述方法还包括:在接收SQL语句之前,进行初始化操作,指定要缓存的数据库表和最大缓存记录数量。
可选地,所述记录表包括:相关表和结果表,所述相关表记录有与在先查询过的数据库表对应的查询信息,所述结果表记录与相关表对应的查询结果。
可选地,所述相关表的数据结构为哈希表,所述相关表的key值为数据库表的名称,所述相关表的value值为根据对数据库表的SQL查询语句生成的字符串;所述结果表的数据结构为哈希表,所述结果表的key值为根据SQL查询语句生成的字符串,所述结果表的value值为查询结果。
可选地,所述将执行结果记录到所述记录表中,包括:在记录表中的记录数量没有达到所述最大缓存记录数量的情况下,将所述执行结果记录到所述记录表中;在所述记录表中的记录数量达到所述最大缓存记录数量的情况下,将最早***所述记录表中的记录删除,并将当前SQL语句信息及其相应的结果添加到所述记录表中。
可选地,所述方法还包括:在数据库查询结束或记录表的内容发生改变时,所述记录表的内容被同步到磁盘的记录文件。
可选地,所述方法还包括:在启动数据库查询时,从所述记录文件加载记录表信息。
可选地,所述方法还包括:当接收到SQL语句后,利用SQL解析器将所述SQL语句解析为如下部分:操作关键字、目标表和条件。
可选地,据SQL语句生成的字符串通过如下步骤生成:将SQL查询语句采用小写形式并去掉SQL查询语句中的空格和不可见字符而生成。
可选地,所述如果涉及修改数据库中目标表的数据,则删除所述记录表中相应表的数据,包括:如果当前SQL语句涉及修改数据库的目标表中的数据,则在相关表中查找与目标表相关的查询语句,将相应结果表中的相关查询语句删除,并将相关表中与目标表相关的查询语句清空。
本发明的另一方面,提供了一种SQL语句复用装置,包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如前所述方法的步骤。
本发明的又一方面,还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如前所述方法的步骤。
本发明实施例提供的SQL语句复用方法和装置,相对于现有数据库的查询操作,可以对指定的数据库表进行记录,可不必执行重复的查询操作,在不与数据库交互的情况下就可获取到查询结果,大大缩短了查询时间,并大大增加了灵活性。
本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在书面说明及其权利要求书以及附图中具体指出的结构实现到并获得。
本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。附图中的部件不是成比例绘制的,而只是为了示出本发明的原理。为了便于示出和描述本发明的一些部分,附图中对应部分可能被放大,即,相对于依据本发明实际制造的示例性装置中的其它部件可能变得更大。在附图中:
图1为本发明一实施例中SQL语句复用方法的流程示意图。
图2为本发明另一实施例中SQL语句复用流程示例。
图3为本发明一实施例中实现SQL语句复用的电子设备的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
针对现有技术中存在的数据库查询时间长的问题,本发明实施例提供了一种SQL语句复用技术,通过将部分最新的查询记录及其结果记录到一个缓存的记录表里,这样只要以后的查询语句在记录表里,且数据库中对应的数据表没有改变,就可以从记录表中取出结果,从而通过以空间换取时间的方式来实现对结构化查询语言SQL语句查询的结果的复用。
图1所示为本发明一实施例中SQL复用方法的流程示意图,该方法可以在数据库查询过程作为数据库查询程序流程的一部分被实施,如图1所示,该SQL复用方法包括以下步骤:
步骤S100,接收并解析SQL语句。
SQL可包括数据操作语言(DML)和数据定义语言(DDL),其中,DML部分可用于查询、更新、删除、***数据,DML语句例如包括SELECT语句、UPDATE语句、DELETE语句、INSERT语句等;DDL部分提供了创建和删除表格等的功能,并且可以创建和删除索引,例如,DDL语句中,CREATE DATABASE用于创建新数据库,ALTER DATABASE用于修改数据库,CREATE TABLE用于创建新表,ALTER TABLE用于变更(改变)数据库表,DROP TABLE用于删除表,CREATE INDEX用于创建索引(搜索键),DROP INDEX用于删除索引。由于SQL语句本身属于现有语句,在此不再赘述。
可利用SQL解析器将一条SQL语句解析为如下几个部分:操作关键字(如INSERT(***)、UPDATE(更新)、DELETE(删除)、SELECT(选择)等)、目标表(关键字所作用于的数据库中的数据表)、条件(如SQL语句中“WHERE”指定的条件等)。
操作关键字中,INSERT表示向数据库表中***数据,UPDATE表示更新数据库表中的数据,DELETE表示从数据库表中删除数据,SELECT表示从数据库表中获取数据。
基于对SQL语句解析出的操作关键字,就可以确定接收的SQL语句是否为查询语句,例如,如果操作关键字为“SELECT”,则表明所接收的SQL语句为查询语句,表示要从数据库的数据表中获取数据。例如,如果SQL语句为SELECT语句,如“SELECT LastName,FirstName FROM Persons”,即表示从表名称为“Persons”的数据表(目标表)中获取名为"LastName"和"FirstName"的列的内容,则基于该语句的操作关键字可以确定该语句为查询语句。
步骤S110,在接收的SQL语句(也称为当前SQL语句)为查询语句的情况下,确定预先存储的记录表中是否存在该SQL语句的执行结果,如果有则从记录表中取出执行结果,如果没有则对数据库执行SQL语句并将执行结果记录到记录表中。
在本发明实施例中,记录表为用于记录SQL查询信息及其查询结果的缓存的表。本发明实施例将最新的数据库查询记录及其结果记录到记录表里,这样在以后接收到SQL查询语句时,如果该SQL查询语句对应的查询信息在记录表里,则可以从记录表中直接取出查询结果。在数据库查询程序结束退出时,会将记录表的内容同步到磁盘的记录文件进行存储,在数据库查询程序再次启动时,可从磁盘存储的记录文件加载得到记录表信息,并将记录表缓存在内存中以使得查询记录表的速度尽量快。
作为示例,记录表可包括两个表,即采用两个表辅助实现SQL语句的复用,其中一个表记录与数据库中某一个或多个数据表相关的查询信息(下文简称“相关表(releated_table)”),另一个表记录相关表中各条查询对应的查询结果(下文简称“结果表(resulttable)”)。
相关表的数据结构可以是一个哈希(Hash)表,该哈希表的key为数据库中的数据表(或称数据库表)的名称,value为一个数组,数组的内容可以是根据SQL语句生成的字符串(sql_string)。结果表的数据结构也是一个Hash表,其key值可以是根据SQL语句生成的字符串(sql_string),其value为查询结果。
记录表中根据SQL语句生成的字符串可以采用如下方式根据SQL语句来生成:先将SQL语句全部变成小写,然后去掉SQL语句中的空格和“\r”、“\n”、“\t”等不可见字符,把剩下的部分变成字符串。该字符串生成方式仅为举例,还可以采用其他方式生成字符串,只要基于该字符串能够准确地体现操作关键字、目标表和条件。
在接收到SQL语句并由SQL解析器解析SQL语句之后,会得知该SQL语句作用于数据库中哪个数据表(目标表)。然后根据SQL语句生成字符串(记为sql_string),并通过查询相关表中对应的key值和value值确定相关表中是否包含目标表名及基于SQL语句生成的字符串sql_string的缓存,如果包含,表示记录表中已经存在SQL语句的执行结果,则从记录表的结果表中查找该字符串sql_string对应的value,即为查询结果。
如果查询相关表确定相关表中不包含生成的字符串sql_string,则执行该SQL查询语句,即对数据库执行查询操作,并将执行查询后得到的查询结果记录到记录表中,即将目标表查询相关信息和查询结果分别记录到相关表和结果表中。
此外,在本发明实施例中,在所接收的SQL语句为非查询语句的情况下,针对数据库执行所接收的SQL语句并获得执行结果。进一步地,确定作为非查询语句的SQL语句是否涉及修改数据库中目标表的数据,如果涉及修改数据库中目标表的数据,则意味着当前记录表中的有关目标表的查询信息和查询结果将不再适用于修改后的目标表,因此删除记录表中与目标表有关的数据。
例如,如果SQL语句为DELETE语句,如“DELETE FROM Persons WHERE LastName='Wilson'”,即表示从表名称为“Persons”的数据表(目标表)中删除姓为“Wilson”(条件)的行。该SQL语句不是查询语句,即为非查询语句,于是对数据库执行该SQL语句并返回执行结果。同时,可确定该DELETE语句涉及对数据库表的修改,修改后,记录表中与目标表有关的记录信息将与数据库中该目标表的信息不符,因此,删除记录表中关于该目标表的记录。此外,进一步地,可将删除了新的执行结果后的新记录表内容同步到磁盘的记录文件中,以便下一次启动数据库查询时从该记录文件加载记录表详情。
针对于其他涉及数据库中数据表的修改的SQL语句,如INSERT语句、UPDATE语句等,进行同样的处理,即对数据库执行SQL语句返回执行结果,并删除记录表中关于相关数据库表的记录。此外,可将更新的记录表内容同步到磁盘的记录文件中。
此外,可选地,在启动数据库查询程序后,在开始对SQL语句的操作之前,可先进行初始化操作,指定要缓存的数据表和/或指定记录表的最大缓存记录数量。
通常,数据库操作员根据其业务内容只会操作固定的几个数据库表,并且操作员通常明确知道自己要操作的数据库表,在这种情况下,在启动数据查询程序后,只需要指定其要操作的数据库表对应的记录表内容进行缓存即可,从而可以节省内存,减少不必要的内存浪费和检索耗时。
如果操作员不清楚自己要操作的数据库表,也可以指定记录文件中所有数据库表对应的内容进行缓存,或者可以不指定,默认缓存记录文件中所有数据库表对应的内容。
最大缓存记录数量可以基于数据库查询装置的内存等硬件资源来确定。指定最大缓存记录数量可以保证在记录表中的数据达到最大缓存记录数量的情况下采取合适的措施来防止最新的记录表数据保存失败。
在本发明另一实施例中,也可以不指定记录表的最大缓存记录数量,在没有指定最大缓存记录数量的情况下,可以采用一默认值作为最大缓存记录数量。
这样,在记录表中的数据达到最大缓存记录数量的情况下,可以删除记录表中最早的记录以将当前查询信息及查询结果添加到记录表中,或者说,用当前查询信息及查询结果覆盖记录表中最早的记录。
如上所述的SQL语句复用方法通过将部分最新的查询记录及其结果记录到一个记录表里,使得后续与记录表中的记录匹配的查询语句可以快速从缓存的记录表中得到查询结果,从而通过SQL语句的复用大大缩短了数据库查询时间。
图2所示为本发明一实施例中更详细的SQL语句复用流程示例。如图2所示,该SQL语句复用流程包括:
步骤S200,数据库查询程序启动后,进行初始化操作,指定要缓存的表和最大缓存记录数量。
此处,最大缓存记录数量可以基于内存的存储空间和/或数据库的大小来合理确定。
步骤S201,接收到SQL语句并解析SQL语句。
通过SQL解析器可以将接收到的SQL语句解析如下几个部分:操作关键字(INSERT、UPDATE、DELETE、SELECT等)、目标表(关键字作用的数据表)、条件(即WHERE指定的条件)。
步骤S202,确定该SQL语句是否为查询语句。
通过解析出的操作关键字可以确定该SQL语句是否为查询语句。如果是查询语句,执行步骤S203,否则执行步骤S209。
步骤S203,从记录表里查找是否存在该SQL语句的对应的查询的缓存,如果有则执行步骤S204,否则执行步骤S205。
更具体地,是根据SQL语句对应的目标表名称和字符串查找相关表中是否存在相匹配的(key,value)值来确定记录表中是否存在该SQL查询对应的缓存。
步骤S204,从记录表中取出并返回查询结果。由此,该次SQL查询结束,于是回到步骤S201,继续接收下一条SQL语句。
步骤S205,在记录表中不存在SQL语句对应的缓存的情况下,对数据库执行该SQL查询语句,即在数据库中进行SQL查询操作。并进一步将查询信息和查询结果***到记录表中(步骤S208)。
在本实施例中,将查询信息和查询结果***到记录表的前提是记录表中的记录没有达到设置的最大记录数量,因此在步骤S207之前,可先执行步骤S206,确定记录表中的数据是否已达到指定的最大记录数量。如果尚未达到指定的最大记录数量,则直接执行步骤S208,将当前SQL语句查询信息和查询结果添加到记录表中;如果已经达到指定的最大记录数量,则先删除记录表中最早的一条记录(步骤S207),然后将当前SQL语句查询信息和查询结果添加到记录表中(步骤S208)。
如果步骤S202中确定接收到的SQL语句不是查询语句,则进入步骤S209,即执行该SQL语句并返回结果。
进一步地,执行步骤S210,判断该条SQL语句是否会修改数据库中数据表的数据,如果不会修改数据表的数据,则直接返回步骤S201,开始接收下一条SQL语句;如果当前SQL语句会修改数据表的数据,则进一步在步骤S211确定记录表中是否有相应数据表(目标表)的相关的缓存,如果没有缓存,则直接返回步骤S201,开始接收下一条SQL语句。如果记录表中有相应数据表相关的缓存,则在步骤S212将记录表中的关于相应数据表的所有记录都删除,然后返回步骤S201,继续接收SQL语句。由于记录表的内容因删除操作二发生了改变,此时会将记录表的内容同步到磁盘的记录文件,下次启动时从该文件加载记录表详情。
此外,在本发明实施例中,查询程序正常结束时,同样会将记录表的内容同步到磁盘的记录文件,以在下次启动时从该文件加载记录表详情。
通过如上所述的本发明,相对于现有数据库的查询操作,可以对指定的数据库表进行记录,可不必执行重复的查询操作,在不与数据库交互的情况下就可获取到查询结果,大大缩短了查询时间,并大大增加了灵活性。
如上所述的本发明的SQL语句复用方法可以通过计算机软件的形式在计算机设备上实现。
相应地,本发明实施例还提供了一种计算机设备,如图3所示,其包括通用的计算机硬件结构,其至少包括处理器301和存储器302。处理器301和存储器302通过总线303连接。存储器302适于存储处理器301可执行的一条或多条指令或程序。该一条或多条指令或程序被处理器301执行以实现上述SQL复用方法中的步骤。
上述处理器301可以是独立的微处理器,也可以是一个或者多个微处理器的集合。由此,处理器301通过执行存储器302所存储的命令,从而执行如上所述的本发明实施例的方法流程实现对于数据的处理和对于其他装置的控制。总线303将上述多个组件连接在一起,同时可将上述组件连接到显示控制器304和显示装置以及输入/输出(I/O)装置305。输入/输出(I/O)装置305可以是鼠标、键盘、调制解调器、网络接口、触控输入装置、体感输入装置、打印机以及本领域公知的其他装置。典型地,输入/输出(I/O)装置305通过输入/输出(I/O)控制器306与***相连。
存储器302可以存储软件组件,例如操作***、通信模块、交互模块以及应用程序。以上所述的每个模块和应用程序都对应于完成一个或多个功能和在发明实施例中描述的方法的一组可执行程序指令。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器301执行时以实现上述SQL语句复用方法的步骤。该计算机可读存储介质可以是有形存储介质,诸如光盘、U盘、软盘、硬盘等。
需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、***和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读存储介质”可以包括能够存储或传输信息的任何介质。机器可读存储介质的例子包括随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的有形存储介质。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或***。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种SQL语句复用方法,其特征在于,该方法包括以下步骤:
数据库查询程序启动后,进行初始化操作,指定要缓存的数据库表和最大缓存记录数量,并且从上次保存的记录文件中加载缓存结果;
接收并解析SQL语句;
在接收的SQL语句为查询语句的情况下,确定内存中预先缓存的记录表中是否存在所述SQL语句的执行结果,如果存在则从所述记录表中取出执行结果,如果不存在则对数据库执行所述SQL语句并将执行结果记录到所述记录表中;
在数据库查询结束或记录表的内容发生改变的情况下,将当前记录表的内容同步到磁盘的记录文件,并在重新启动数据库查询时从所述记录文件加载记录表信息以将最新记录表缓存在内存中;所述从所述记录文件加载记录表信息以将最新记录表缓存在内存中包括:将指定的要操作的数据库表对应的记录表内容进行缓存,或者,对指定记录文件中所有数据库表对应的内容进行缓存;
所述将执行结果记录到所述记录表中,包括:
在记录表中的记录数量没有达到所述最大缓存记录数量的情况下,将所述执行结果记录到所述记录表中;在所述记录表中的记录数量达到所述最大缓存记录数量的情况下,将最早***所述记录表中的记录删除,并将当前SQL语句信息及其相应的结果添加到所述记录表中;
所述记录表包括:相关表和结果表,所述相关表记录有与在先查询过的数据库表对应的查询信息,所述结果表记录与相关表对应的查询结果;所述相关表的数据结构为哈希表,所述相关表的key值为数据库表的名称,所述相关表的value值为根据对数据库表的SQL查询语句生成的字符串;所述结果表的数据结构为哈希表,所述结果表的key值为根据SQL查询语句生成的字符串,所述结果表的value值为查询结果。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所接收的SQL语句为非查询语句的情况下,对数据库执行所接收的SQL语句并获得执行结果;
确定作为非查询语句的所述SQL语句是否涉及修改数据库中目标表的数据,如果涉及修改数据库中目标表的数据,则删除所述记录表中与目标表相关的数据。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当接收到SQL语句后,利用SQL解析器将所述SQL语句解析为如下部分:操作关键字、目标表和条件。
4.根据权利要求1所述的方法,其特征在于,据SQL查询语句生成的字符串通过如下步骤生成:将SQL查询语句采用小写形式并去掉SQL查询语句中的空格和不可见字符而生成。
5.根据权利要求2所述的方法,其特征在于,所述如果涉及修改数据库中目标表的数据,则删除所述记录表中与目标表相关的数据,包括:
如果当前SQL语句涉及修改数据库的目标表中的数据,则在相关表中查找与目标表相关的查询语句,将相应结果表中的相关查询结果删除,并将相关表中与目标表相关的查询语句清空。
6.一种SQL语句复用装置,包括处理器和存储器,其特征在于,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如权利要求1至5中任意一项所述方法的步骤。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5中任意一项所述方法的步骤。
CN202010079747.6A 2020-02-04 2020-02-04 Sql语句复用方法和装置 Active CN111324607B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010079747.6A CN111324607B (zh) 2020-02-04 2020-02-04 Sql语句复用方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010079747.6A CN111324607B (zh) 2020-02-04 2020-02-04 Sql语句复用方法和装置

Publications (2)

Publication Number Publication Date
CN111324607A CN111324607A (zh) 2020-06-23
CN111324607B true CN111324607B (zh) 2021-09-14

Family

ID=71172141

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010079747.6A Active CN111324607B (zh) 2020-02-04 2020-02-04 Sql语句复用方法和装置

Country Status (1)

Country Link
CN (1) CN111324607B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111913960A (zh) * 2020-07-29 2020-11-10 深圳云之家网络有限公司 一种表单处理方法及相关设备
CN112783927B (zh) * 2021-01-27 2023-03-17 浪潮云信息技术股份公司 一种数据库查询方法及***
CN113011117B (zh) * 2021-02-18 2022-10-28 中科驭数(北京)科技有限公司 硬件加速板卡模拟仿真方法、***和装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103377292A (zh) * 2013-07-02 2013-10-30 华为技术有限公司 数据库结果集缓存方法及设备
CN103455560A (zh) * 2013-08-12 2013-12-18 曙光信息产业股份有限公司 一种数据查询方法及***
CN104050276A (zh) * 2014-06-26 2014-09-17 北京思特奇信息技术股份有限公司 一种分布式数据库的缓存处理方法及***
CN107038222A (zh) * 2017-03-24 2017-08-11 福建天泉教育科技有限公司 数据库缓存实现方法及其***

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104572979B (zh) * 2014-12-31 2018-09-11 北京锐安科技有限公司 一种处理结构化查询语言sql的方法及装置
US10452657B2 (en) * 2016-09-28 2019-10-22 International Business Machines Corporation Reusing sub-query evaluation results in evaluating query for data item having multiple representations in graph
US11567934B2 (en) * 2018-04-20 2023-01-31 Oracle International Corporation Consistent client-side caching for fine grained invalidations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103377292A (zh) * 2013-07-02 2013-10-30 华为技术有限公司 数据库结果集缓存方法及设备
CN103455560A (zh) * 2013-08-12 2013-12-18 曙光信息产业股份有限公司 一种数据查询方法及***
CN104050276A (zh) * 2014-06-26 2014-09-17 北京思特奇信息技术股份有限公司 一种分布式数据库的缓存处理方法及***
CN107038222A (zh) * 2017-03-24 2017-08-11 福建天泉教育科技有限公司 数据库缓存实现方法及其***

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于RFID技术的校车安全管理***的设计与实现;王奉章;《中国优秀硕士学位论文全文数据库》;20190515;第2019年卷(第05期);第40-42页 *

Also Published As

Publication number Publication date
CN111324607A (zh) 2020-06-23

Similar Documents

Publication Publication Date Title
EP3111347B1 (en) Efficient methods and systems for consistent read in record-based multi-version concurrency control
CN111324607B (zh) Sql语句复用方法和装置
JP5437557B2 (ja) 検索処理方法及び検索システム
US8051045B2 (en) Archive indexing engine
JP4162711B2 (ja) Nグラム・ワード分解を用いた携帯型文書索引付け用のシステム及び方法
JP5237335B2 (ja) 対話形サーチクエリー改良のためのシステム及び方法
US8566300B2 (en) Mechanism for efficient maintenance of XML index structures in a database system
JPH02271468A (ja) データ処理方法
US20090164415A1 (en) Method and system for managing database
CN112231321B (zh) 一种Oracle二级索引及索引实时同步方法
US9418154B2 (en) Push-model based index updating
CN110889023A (zh) 一种elasticsearch的分布式多功能搜索引擎
US20070239656A1 (en) Removal of Database Query Function Calls
US9594784B2 (en) Push-model based index deletion
JP4237813B2 (ja) 構造化文書管理システム
US20080005077A1 (en) Encoded version columns optimized for current version access
CN115391457B (zh) 跨数据库的数据同步方法、装置及存储介质
JP2009080806A (ja) Webページにリンクを挿入する方法
CN114443722A (zh) 缓存管理方法、装置、存储介质及电子设备
JP3292160B2 (ja) Cobol言語のソースプログラムのコンバージョン方法及び装置並びに記録媒体
CN114817293A (zh) 一种基于分布式sql的数据查询方法及***
JP2007133682A (ja) 全文検索システム、及び、その全文検索方法
KR100659370B1 (ko) 시소러스 매칭에 의한 문서 db 형성 방법 및 정보검색방법
JP4091586B2 (ja) 構造化文書管理システム、索引構築方法及びプログラム
JP4304226B2 (ja) 構造化文書管理システム、構造化文書管理方法及びプログラム

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