CN115455040A - 提高数据库sql查询效率的方法、装置、设备、介质 - Google Patents

提高数据库sql查询效率的方法、装置、设备、介质 Download PDF

Info

Publication number
CN115455040A
CN115455040A CN202210724940.XA CN202210724940A CN115455040A CN 115455040 A CN115455040 A CN 115455040A CN 202210724940 A CN202210724940 A CN 202210724940A CN 115455040 A CN115455040 A CN 115455040A
Authority
CN
China
Prior art keywords
data
column storage
column
statement
memory area
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.)
Pending
Application number
CN202210724940.XA
Other languages
English (en)
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.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent 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 Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202210724940.XA priority Critical patent/CN115455040A/zh
Publication of CN115455040A publication Critical patent/CN115455040A/zh
Pending legal-status Critical Current

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/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24549Run-time 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof

Landscapes

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

Abstract

本发明属于数据库查询管理技术领域,具体提供一种提高数据库SQL查询效率的方法、装置、设备、介质,所述方法包括如下步骤:当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储;若是,查找SQL语句使用的数据是否在列存储内存区域中;当数据不在列存储内存区域中时,查找该数据是否在原数据缓存区中;若数据在原数据缓存区中,在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域;根据语句使用列存储内存区域中的数据进行查询;当数据在列存储内存区域中时,根据语句使用列存储内存区域中的数据进行查询;若否,根据语句使用原数据缓存区中的数据进行查询。提高数据库性能。

Description

提高数据库SQL查询效率的方法、装置、设备、介质
技术领域
本发明涉及数据库查询管理技术领域,具体涉及一种提高数据库SQL查询效率的方法、装置、设备、介质。
背景技术
ORACLE数据库使用的是行存储方式,当数据读取到内存的时候,在内存中也是以行存储方式存储。当查询SQL只需要某一列或少数几列时,也会将列所在行的数据块从硬盘读取到内存,从数据块中提取所有行数据,再从中提取需要的列值,由此可见在SQL中当条件和结果只需要少数几个列时,却花费大量的时间读取无关数据,耗费了大量I/O及CPU时间,也就是即使查询只涉及少数字段,也需要读取完整的行记录。
虽然行存储数据库会引入索引技术来避免全量读取,但由于索引创建不合理、未创建索引、读取索引也会额外增加I/O等原因,在某些情况下可能对提升查询性能并不明显。
发明内容
针对行存储数据库会引入索引技术来避免全量读取,但由于索引创建不合理、未创建索引、读取索引也会额外增加I/O等原因,在某些情况下可能对提升查询性能并不明显的问题,本发明提供一种提高数据库SQL查询效率的方法、装置、设备、介质。
本发明的技术方案是:
第一方面,本发明技术方案提供一种提高数据库SQL查询效率的方法,包括如下步骤:
当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储;
若是,查找SQL语句使用的数据是否在列存储内存区域中;
当数据不在列存储内存区域中时,查找该数据是否在原数据缓存区中;若数据在原数据缓存区中,在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域;根据语句使用列存储内存区域中的数据进行查询;
当数据在列存储内存区域中时,根据语句使用列存储内存区域中的数据进行查询;
若否,根据语句使用原数据缓存区中的数据进行查询。
进一步的,查找该数据是否在原数据缓存区中的步骤之后还包括:
若数据不在原数据缓存区中,从硬盘中读取数据,将需要的数据全部读取到原数据缓存区内;执行步骤:在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域。
进一步的,在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域的步骤包括:
在原数据缓存区中提取数据所在数据块;
从数据块中提取所有行数据,再从行数据中提取需要的列值;
将提取的数据按列存储方式整合到新数据块,存储到列存储内存区域中。
进一步的,当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储的步骤之前包括:
开启列存储优化时,获取数据库负载信息库中语句进行列存储优化建议分析,并根据分析结果将适用于列存储的语句生成列存储语句记录表。
进一步的,开启列存储优化时,获取数据库负载信息库中语句进行列存储优化建议分析,并根据分析结果将适用于列存储的语句生成列存储语句记录表的步骤包括:
开启列存储优化时,获取数据库负载信息库中语句;给数据库提供一个是否开启使用列存储方式对语句进行查询的开关,提供数据库级别的开关及针对单个语句的开关。当打开数据库级别开关后,数据库根据前边列存储优化建议的结果,判断语句是否采用列存储方式执行。
将语句涉及的硬盘中的数据块全部读取到原数据缓存区内;
在原数据缓存区中的数据块中提取所有行数据;
将所有数据按列进行提取分离,再将分离提取的列数据按列存储方式整合到新数据块,然后存储到列存储内存区域中;
分别使用列存储内存区域中的数据和原数据缓存区中的数据执行一次SQL语句查询;
对SQL语句的两种存储方式的执行效率进行比对;
若列存储方式下SQL语句执行效率是原执行效率的第一阈值倍数,则记录该语句在列存储语句记录表中列存储方式的值;否则记录该语句在列存储语句记录表中原存储方式的值。
获取数据库负载信息库中语句,从单次执行时间长、I/O消耗多的SQL语句开始对其进行列存储优化建议分析,该操作会在每天晚上数据库不繁忙的时候自动开始执行,分析完一条SQL后再进行另一条SQL的分析。将需要进行列存储优化的语句涉及的数据块全部读取到原数据缓存区内(该缓存区中数据为行存储的数据块),从这些已经放在原数据缓存区中的数据块中提取所有行数据,将所有数据按列进行提取分离,再将分离提取的列数据按列存储方式整合到新数据块,然后存储到列存储内存区域中。经过上面步骤,SQL语句涉及的数据已经按列存储方式存储到了列存储内存区域中,使用列存储内存区域中的数据执行一次SQL语句,对SQL语句的两种存储方式的执行效率进行比对。如果列存储方式下SQL语句效率比原执行效率能提高一倍及以上,则数据库记录该语句以后使用列存储方式执行;如果列存储方式下SQL语句效率并不能比原执行效率能提高一倍,则数据库依然使用存储方式执行该SQL语句。
进一步的,该方法还包括:
当数据被修改或删除后,修改原数据缓存区中该数据所在数据块,同时将修改的数据记录到列存储内存区域中的缓存变更区域中;
根据所述缓存变更区域中的数据定期变更到列存储内存区域中。
进一步的,该方法还包括:
当数据新插入时,在原数据缓存区中构建数据块,同时将新插入的数据记录到列存储内存区域中的缓存变更区域中;
根据所述缓存变更区域中的数据定期更新到列存储内存区域中。
为了使数据尽可能多的存储在列存储内存区域中,建议列存储内存区域越大越好,当无法存储新数据后,就需要对列存储内存区域中数据进行清理,采用最少使用最先出的方式将近期没被使用或很少使用的数据移出内存区,以便腾出新的空间。
当SQL语句使用列存储方式进行执行时,首先查找SQL语句使用的数据是否在列存储内存区域中。当发现数据不在列存储内存区域中时,就需要查找该数据是否在原数据缓存区中,如果所需数据在原数据缓存中,提读取数据所在数据块,从这些数据块中提取所有行数据,再从中提取需要的列值,再将提取的数据按列存储方式整合到数据块,然后存储到列存储内存区域中供SQL语句进行列存储方式查询使用。如果所需数据即不在原数据缓存中也不在列存储内存区域中,则需要从硬盘中读取数据,将需要的数据全部读取原数据缓存区内,从这些数据块中提取分享出所有行数据,再从中提取需要的列值(即,并非表的所有列都会存储在列存储内存区中,目的是节省空间),再将提取的数据按列存储方式整合到数据块,然后存储到列存储内存区域中供SQL语句进行列存储方式查询使用。
实现在不改变数据在硬盘及原缓存空间中行存储方式的情况下,在内区域中开辟一块列存储方式的内存空间,用于存储从行存储缓存区中分离出来的列存储数据。当对SQL语句进行列存储优化建议后,提取该语句涉及表的数据放入原数据缓存内存区中,然后将其中记录转换成列存储,存储到列存储内存区域中,只存储语句涉及的列,用不到的列不再放到列存储内存区域中(只保留需要的列,不需要的列值抛弃),以减少列存储内存区域数据存储量。列存储内存区域中的数据主要用于查询,当某个数据要进行修改时,首先修改的是放在原数据缓存内存区中的数据,提交后写入REDO和数据文件,然后再修改列存储内存区域中相应的数据,这样就保证了列存储内存区域中的数据与原数据缓存内存区中数据一致。当触发查询时,数据库判断语句是否适用于列存储,如果适用于列存储,则根据语句使用列存储内存区域中的数据进行查询,列存储内存区域中不包含的数据,会从硬盘或原数据缓存内存区中提取后存入列存储内存区域。本专利是通过在内存中将行存储数据块转换成列存储数据块,在SQL查询的时候直接调用列存储数据块,从而提高查询效率,并且通过逻辑控制,保证列存储数据块中数据与行存储数据保持一致。
第二方面,本发明技术方案还提供一种提高数据库SQL查询效率的装置,包括列存储判断模块、数据查找模块、列存储处理模块、查询响应模块;
列存储判断模块,用于当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储;
数据查找模块,用于列存储判断模块判断SQL语句适用于列存储时,查找SQL语句使用的数据是否在列存储内存区域中;当数据不在列存储内存区域中时,查找该数据是否在原数据缓存区中;
列存储处理模块,用于若数据查找模块查找到数据在原数据缓存区中,在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域;
查询响应模块,用于数据在列存储内存区域中时,根据语句使用列存储内存区域中的数据进行查询;还用于数据不在列存储内存区域中根据语句使用原数据缓存区中的数据进行查询。
进一步的,该装置还包括硬盘读取模块;
硬盘读取模块,用于数据查找模块输出数据不在原数据缓存区中时,从硬盘中读取数据,将需要的数据全部读取到原数据缓存区内,读取完成后输出信息到列存储处理模块。
进一步的,列存储处理模块包括数据块提取单元、行列数据提取单元、整合执行单元;
数据块提取单元,用于在原数据缓存区中提取数据所在数据块;
行列数据提取单元,用于从数据块中提取所有行数据,再从行数据中提取需要的列值;
整合执行单元,用于将提取的数据按列存储方式整合到新数据块,存储到列存储内存区域中。
进一步的,该装置还包括控制模块和列存储优化建议分析模块;
控制模块,用于开启或关闭列存储优化开关;
列存储优化建议分析模块,用于控制模块开启列存储优化开关后,获取数据库负载信息库中语句进行列存储优化建议分析,并根据分析结果将适用于列存储的语句生成列存储语句记录表。
进一步的,列存储优化建议分析模块包括语句获取单元、数据读取单元、查询执行单元、比较单元、记录单元;
语句获取单元,用于开启列存储优化时,获取数据库负载信息库中语句;
数据读取单元,用于将语句涉及的硬盘中的数据块全部读取到原数据缓存区内,读取完成后输出信息到列存储处理模块;
查询执行单元,用于列存储处理模块处理完成后分别使用列存储内存区域中的数据和原数据缓存区中的数据执行一次SQL语句查询;
比较单元,用于对SQL语句的两种存储方式的执行效率进行比对;
记录单元,用于若列存储方式下SQL语句执行效率是原执行效率的第一阈值倍数,则记录该语句在列存储语句记录表中列存储方式的值;否则记录该语句在列存储语句记录表中原存储方式的值。
进一步的,该装置还包括数据改删处理模块;
数据改删处理模块,用于当数据被修改或删除后,修改原数据缓存区中该数据所在数据块,同时将修改的数据记录到列存储内存区域中的缓存变更区域中;根据所述缓存变更区域中的数据定期变更到列存储内存区域中。
进一步的,该方法还包括数据插入处理模块;
数据插入处理模块,用于当数据新插入时,在原数据缓存区中构建数据块,同时将新插入的数据记录到列存储内存区域中的缓存变更区域中;根据所述缓存变更区域中的数据定期更新到列存储内存区域中。
第三方面,本发明技术方案还提供一种电子设备,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
存储器存储有可被至少一个处理器执行的计算机程序指令,所述计算机程序指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如第一方面所述的提高数据库SQL查询效率的方法。
第四方面,本发明技术方案还提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如第一方面所述的提高数据库SQL查询效率的方法。
从以上技术方案可以看出,本发明具有以下优点:提高ORACLE数据库SQL查询效率的功能设计,实现在不改变数据在硬盘及原缓存空间中行存储方式的情况下,在内区域中开辟一块列存储方式的内存空间,用于存储从行存储缓存区中分离出来的列存储数据。对数据库中效率较低、执行时间较长、I/O消耗较多的SQL语句所涉及的表在内存中转换成列存储。当SQL语句使用列存储方式可以提高查询语句执行效率以及减少I/O,提高数据库性能。对于存在大量并行查询的数据库,使用列存储方式进行查询可以极大提高数据库性能,同时通过逻辑处理可以控制SQL语句不用列存储方式,使本专利的使用更具灵活性。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的方法的示意性流程图。
图2是本发明实施例中数据块从行存储转成列存储的逻辑示意图。
图3是本发明一个实施例的装置的示意性框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
ORACLE数据库:一种大型的关系型数据。ORACLE数据库以行存储方式将数据存储在硬盘上,当数据读取到内存的时候,在内存中也是以行存储方式存储。
数据块:数据库由数据文件组成,每个数据文件又由大小统一的block块组成(默认为8K大小),每个数据块被划分为一定格式(块头、块体等)。
行存储:每行记录都会包含多个列,多个连续的行记录存储在数据块中。在数据块中的行存储类似如下,存储完一行所有列后,再接着存储另一行;
列存储:每行记录都会包含多个列,按列存储在数据块中,将所有行的同一列顺序存储。
如图1所示,本发明实施例提供一种提高数据库SQL查询效率的方法,包括如下步骤:
步骤1:当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储;若是,执行步骤2,否则,执行步骤7;
步骤2:查找SQL语句使用的数据是否在列存储内存区域中;若否,执行步骤3,若是,执行步骤6;
步骤3:查找该数据是否在原数据缓存区中;若是,执行步骤5;若否,执行步骤4;
步骤4:从硬盘中读取数据,将需要的数据全部读取到原数据缓存区内;执行步骤5;
步骤5:在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域;执行步骤6;
步骤6:根据语句使用列存储内存区域中的数据进行查询;
步骤7:根据语句使用原数据缓存区中的数据进行查询。
当触发查询时,数据库判断语句是否适用于列存储,如果适用于列存储,则根据语句使用列存储内存区域中的数据进行查询,列存储内存区域中不包含的数据,会从硬盘或原数据缓存内存区中提取后存入列存储内存区域。
当SQL语句使用列存储方式进行执行时,首先查找SQL语句使用的数据是否在列存储内存区域中。当发现数据不在列存储内存区域中时,就需要查找该数据是否在原数据缓存区中,如果所需数据在原数据缓存区中,提读取数据所在数据块,从这些数据块中提取所有行数据,再从中提取需要的列值,再将提取的数据按列存储方式整合到新数据块,然后存储到列存储内存区域中供SQL语句进行列存储方式查询使用。如果所需数据即不在原数据缓存区中也不在列存储内存区域中,则需要从硬盘中读取数据,将需要的数据全部读取原数据缓存区内,从这些数据块中提取分享出所有行数据,再从中提取需要的列值(即,并非表的所有列都会存储在列存储内存区中,目的是节省空间),再将提取的数据按列存储方式整合到新数据块,然后存储到列存储内存区域中供SQL语句进行列存储方式查询使用。
在有些实施例中,步骤5中在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域的步骤包括:
步骤51:在原数据缓存区中提取数据所在数据块;
步骤52:从数据块中提取所有行数据,再从行数据中提取需要的列值;
步骤53:将提取的数据按列存储方式整合到新数据块,存储到列存储内存区域中。
在数据库内存区域中新增加一块列存储内存区域,用于存放转换成列存储的数据。当对语句进行列存储优化后,提取该语句涉及表的数据放入原数据缓存内存区中,然后将其中记录转换成列存储,存储到列存储内存区域中,只存储语句涉及的列,用不到的列不再放到列存储内存区域中,以减少列存储内存区域数据存储量。列存储内存区域中的数据主要用于查询。
在有些实施例中,当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储的步骤之前包括:
S0:开启列存储优化时,获取数据库负载信息库中语句进行列存储优化建议分析,并根据分析结果将适用于列存储的语句生成列存储语句记录表。
增加数据库对语句列存储方式测试的参数sql_col_advice,取值为ON/OFF,默认为OFF,当设置为ON时,开启列存储优化。当设置为ON时,获取数据库负载信息库中语句,从执行时间长、I/O消耗多的SQL语句开始对其进行列存储优化建议分析,该操作会在每天晚上数据库不繁忙的时候自动开始执行。将需要进行列存储优化的语句涉及的数据块全部读取原数据缓存区内(该缓存区中数据为行存储的数据块),从这些数据块中提取所有行数据,再从中提取需要的列值,再将提取的数据按列存储方式整合到新数据块,然后存储到列存储内存区域中。经过上面步骤,SQL语句涉及的数据已经按列存储方式存储到了列存储内存区域中,使用列存储内存区域中的数据执行一次SQL语句。对SQL语句的两种存储方式的执行效率进行比对,并将结果记录到表T_SQL_COL_ADVICE中供后面使用。
增加一张SQL语句是否执行列存储方式的记录表T_SQL_COL_ADVICE,即列存储语句记录表,如表1所示,当打开“触发对特定语句的列存储优化建议”参数后,数据库对数据库中语句进行列存储性能比对,当使用列存储方式执行SQL语句性能要比常规行存储方式高一倍时,将该语句在“列存储语句记录表”中的IS_COL值置为Y,否则IS_COL值置为N。语句行存储时的执行时长记录在ROW_TIME,语句列存储时的执行时长记录在COL_TIME。
表1
SQL_ID 语句SQL ID
IS_COL 是否可以采用列存储方式执行语句Y/N
ROW_TIME 行存储执行时长
COL_TIME 列存储执行时长
COMP_TIME 比对时间
增加db_colstor_cache_size参数,用于指定列存储内存区域大小,该区域存储列存储数据块。给数据库提供一个是否开启使用列存储方式对语句进行查询的开关,提供数据库级别的开关及针对单个语句的开关。当打开数据库级别开关后,数据库根据前边列存储优化建议的结果,判断语句是否采用列存储方式执行。
需要说明的是,开启列存储优化时,获取数据库负载信息库中语句进行列存储优化建议分析,并根据分析结果将适用于列存储的语句生成列存储语句记录表的步骤包括:
S01:开启列存储优化时,获取数据库负载信息库中语句;
S02:将语句涉及的硬盘中的数据块全部读取到原数据缓存区内;
S03:在原数据缓存区中的数据块中提取所有行数据;
S04:将所有数据按列进行提取分离,再将分离提取的列数据按列存储方式整合到新数据块,然后存储到列存储内存区域中;如图2所示,行存储转成列存储,并剔除不需要的列;
S05:分别使用列存储内存区域中的数据和原数据缓存区中的数据执行一次SQL语句查询;
S06:对SQL语句的两种存储方式的执行效率进行比对;
S07:若列存储方式下SQL语句执行效率是原执行效率的第一阈值倍数,则记录该语句在列存储语句记录表中列存储方式的值;否则记录该语句在列存储语句记录表中原存储方式的值。
获取数据库负载信息库中语句,从单次执行时间长、I/O消耗多的SQL语句开始对其进行列存储优化建议分析,该操作会在每天晚上数据库不繁忙的时候自动开始执行,分析完一条SQL语句后再进行另一条SQL语句的分析。
将需要进行列存储优化的语句涉及的数据块全部读取到原数据缓存区内(该缓存区中数据为行存储的数据块),从这些已经放在原数据缓存区中的数据块中提取所有行数据,将所有数据按列进行提取分离,再将分离提取的列数据按列存储方式整合到新数据块,然后存储到列存储内存区域中。经过上面步骤,SQL语句涉及的数据已经按列存储方式存储到了列存储内存区域中,使用列存储内存区域中的数据执行一次SQL语句,对SQL语句的两种存储方式的执行效率进行比对。如果列存储方式下SQL语句效率比原执行效率能提高一倍及以上,则数据库记录该语句以后使用列存储方式执行;如果列存储方式下SQL语句效率并不能比原执行效率能提高一倍,则数据库依然使用存储方式执行该SQL语句。
为了使数据尽可能多的存储在列存储内存区域中,建议列存储内存区域越大越好,当无法存储新数据后,就需要对列存储内存区域中数据进行清理,采用最少使用最先出的方式将最近设定时间阈值内没被使用或使用次数少于次数阈值的数据移出列存储内存区域,以便腾出新的空间。
在有些会实例中,该方法还包括:
当数据被修改或删除后,修改原数据缓存区中该数据所在数据块,同时将修改的数据记录到列存储内存区域中的缓存变更区域中;
根据所述缓存变更区域中的数据定期变更到列存储内存区域中。
需要说明的是,当数据被修改或删除后,数据库修改原数据缓存中该数据所在数据块,同时将修改的数据(非整个数据块)记录到列存储内存区域中的缓存变更区域中,以使列存储内存区域中数据与原数据缓存区和硬盘中数据一致。
在有些会实例中,该方法还包括:
当数据新插入时,在原数据缓存区中构建数据块,同时将新插入的数据记录到列存储内存区域中的缓存变更区域中;
根据所述缓存变更区域中的数据定期更新到列存储内存区域中。当数据是新插入时,数据库在原数据缓存中构建数据块,同时将新插入的数据(非整个数据块)记录到列存储内存区域中的缓存变更区域中,以使列存储内存区域中数据与原数据缓存区和硬盘中数据一致。
在内区域中开辟一块列存储方式的内存空间,即列存储内存区域,用于存储从行存储缓存区中分离出来的列存储数据。当对SQL语句进行列存储优化建议后,提取该语句涉及表的数据放入原数据缓存内存区中,然后将其中记录转换成列存储,存储到列存储内存区域中,只存储语句涉及的列,用不到的列不再放到列存储内存区域中(只保留需要的列,不需要的列值抛弃),以减少列存储内存区域数据存储量。列存储内存区域中的数据主要用于查询,当某个数据要进行修改时,首先修改的是放在原数据缓存内存区中的数据,提交后写入REDO和数据文件,然后再修改列存储内存区域中相应的数据,这样就保证了列存储内存区域中的数据与原数据缓存内存区中数据一致。当触发查询时,数据库判断语句是否适用于列存储,如果适用于列存储,则根据语句使用列存储内存区域中的数据进行查询,列存储内存区域中不包含的数据,会从硬盘或原数据缓存内存区中提取后存入列存储内存区域。本专利是通过在内存中将行存储数据块转换成列存储数据块,在SQL查询的时候直接调用列存储数据块,从而提高查询效率,并且通过逻辑控制,保证列存储数据块中数据与行存储数据保持一致。
如图3所示,本发明实施例还提供一种提高数据库SQL查询效率的装置,包括列存储判断模块、数据查找模块、列存储处理模块、查询响应模块;
列存储判断模块,用于当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储;
数据查找模块,用于列存储判断模块判断SQL语句适用于列存储时,查找SQL语句使用的数据是否在列存储内存区域中;当数据不在列存储内存区域中时,查找该数据是否在原数据缓存区中;
列存储处理模块,用于若数据查找模块查找到数据在原数据缓存区中,在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域;
查询响应模块,用于数据在列存储内存区域中时,根据语句使用列存储内存区域中的数据进行查询;还用于数据不在列存储内存区域中根据语句使用原数据缓存区中的数据进行查询。
在有些实施例中,该装置还包括硬盘读取模块;
硬盘读取模块,用于数据查找模块输出数据不在原数据缓存区中时,从硬盘中读取数据,将需要的数据全部读取到原数据缓存区内,读取完成后输出信息到列存储处理模块。
在有些实施例中,列存储处理模块包括数据块提取单元、行列数据提取单元、整合执行单元;
数据块提取单元,用于在原数据缓存区中提取数据所在数据块;
行列数据提取单元,用于从数据块中提取所有行数据,再从行数据中提取需要的列值;
整合执行单元,用于将提取的数据按列存储方式整合到新数据块,存储到列存储内存区域中。
在有些实施例中,该装置还包括控制模块和列存储优化建议分析模块;
控制模块,用于开启或关闭列存储优化开关;
列存储优化建议分析模块,用于控制模块开启列存储优化开关后,获取数据库负载信息库中语句进行列存储优化建议分析,并根据分析结果将适用于列存储的语句生成列存储语句记录表。
在有些实施例中,列存储优化建议分析模块包括语句获取单元、数据读取单元、查询执行单元、比较单元、记录单元;
语句获取单元,用于开启列存储优化时,获取数据库负载信息库中语句;
数据读取单元,用于将语句涉及的硬盘中的数据块全部读取到原数据缓存区内,读取完成后输出信息到列存储处理模块;
查询执行单元,用于列存储处理模块处理完成后分别使用列存储内存区域中的数据和原数据缓存区中的数据执行一次SQL语句查询;
比较单元,用于对SQL语句的两种存储方式的执行效率进行比对;
记录单元,用于若列存储方式下SQL语句执行效率是原执行效率的第一阈值倍数,则记录该语句在列存储语句记录表中列存储方式的值;否则记录该语句在列存储语句记录表中原存储方式的值。
在有些实施例中,该装置还包括数据改删处理模块;
数据改删处理模块,用于当数据被修改或删除后,修改原数据缓存区中该数据所在数据块,同时将修改的数据记录到列存储内存区域中的缓存变更区域中;根据所述缓存变更区域中的数据定期变更到列存储内存区域中。
在有些实施例中,该方法还包括数据插入处理模块;
数据插入处理模块,用于当数据新插入时,在原数据缓存区中构建数据块,同时将新插入的数据记录到列存储内存区域中的缓存变更区域中;根据所述缓存变更区域中的数据定期更新到列存储内存区域中。
本发明实施例还提供一种电子设备,所述电子设备包括:处理器、通信接口、存储器和总线,其中,处理器,通信接口,存储器通过总线完成相互间的通信。总线可以用于电子设备与传感器之间的信息传输。处理器可以调用存储器中的逻辑指令,以执行如下方法:步骤1:当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储;若是,执行步骤2,否则,执行步骤7;步骤2:查找SQL语句使用的数据是否在列存储内存区域中;若否,执行步骤3,若是,执行步骤6;步骤3:查找该数据是否在原数据缓存区中;若是,执行步骤5;若否,执行步骤4;步骤4:从硬盘中读取数据,将需要的数据全部读取到原数据缓存区内;执行步骤5;步骤5:在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域;执行步骤6;步骤6:根据语句使用列存储内存区域中的数据进行查询;步骤7:根据语句使用原数据缓存区中的数据进行查询。
在一些具体的实施例中,处理器可以调用存储器中的逻辑指令,以执行如下方法:步骤51:在原数据缓存区中提取数据所在数据块;步骤52:从数据块中提取所有行数据,再从行数据中提取需要的列值;步骤53:将提取的数据按列存储方式整合到新数据块,存储到列存储内存区域中。
此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行上述方法实施例所提供的方法,例如包括:步骤1:当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储;若是,执行步骤2,否则,执行步骤7;步骤2:查找SQL语句使用的数据是否在列存储内存区域中;若否,执行步骤3,若是,执行步骤6;步骤3:查找该数据是否在原数据缓存区中;若是,执行步骤5;若否,执行步骤4;步骤4:从硬盘中读取数据,将需要的数据全部读取到原数据缓存区内;执行步骤5;步骤5:在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域;执行步骤6;步骤6:根据语句使用列存储内存区域中的数据进行查询;步骤7:根据语句使用原数据缓存区中的数据进行查询。
在一些具体的实施例中,所述可读存储介质中被处理器执行的程序指令,具体可以实现以下步骤:步骤51:在原数据缓存区中提取数据所在数据块;步骤52:从数据块中提取所有行数据,再从行数据中提取需要的列值;步骤53:将提取的数据按列存储方式整合到新数据块,存储到列存储内存区域中。
在一些具体的实施例中,所述可读存储介质中被处理器执行的程序指令,具体可以实现以下步骤:S01:开启列存储优化时,获取数据库负载信息库中语句;S02:将语句涉及的硬盘中的数据块全部读取到原数据缓存区内;S03:在原数据缓存区中的数据块中提取所有行数据;S04:将所有数据按列进行提取分离,再将分离提取的列数据按列存储方式整合到新数据块,然后存储到列存储内存区域中;如图2所示,行存储转成列存储,并剔除不需要的列;S05:分别使用列存储内存区域中的数据和原数据缓存区中的数据执行一次SQL语句查询;S06:对SQL语句的两种存储方式的执行效率进行比对;S07:若列存储方式下SQL语句执行效率是原执行效率的第一阈值倍数,则记录该语句在列存储语句记录表中列存储方式的值;否则记录该语句在列存储语句记录表中原存储方式的值。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (10)

1.一种提高数据库SQL查询效率的方法,其特征在于,包括如下步骤:
当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储;
若是,查找SQL语句使用的数据是否在列存储内存区域中;
当数据不在列存储内存区域中时,查找该数据是否在原数据缓存区中;若数据在原数据缓存区中,在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域;根据SQL语句使用列存储内存区域中的数据进行查询;
当数据在列存储内存区域中时,根据SQL语句使用列存储内存区域中的数据进行查询;
若否,根据SQL语句使用原数据缓存区中的数据进行查询。
2.根据权利要求1所述的提高数据库SQL查询效率的方法,其特征在于,查找该数据是否在原数据缓存区中的步骤之后还包括:
若数据不在原数据缓存区中,从硬盘中读取数据,将需要的数据全部读取到原数据缓存区内;执行步骤:在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域。
3.根据权利要求2所述的提高数据库SQL查询效率的方法,其特征在于,在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域的步骤包括:
在原数据缓存区中提取数据所在数据块;
从数据块中提取所有行数据,再从行数据中提取需要的列值;
将提取的数据按列存储方式整合到新数据块,存储到列存储内存区域中。
4.根据权利要求3所述的提高数据库SQL查询效率的方法,其特征在于,当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储的步骤之前包括:
开启列存储优化时,获取数据库负载信息库中语句进行列存储优化建议分析,并根据分析结果将适用于列存储的语句生成列存储语句记录表。
5.根据权利要求4所述的提高数据库SQL查询效率的方法,其特征在于,开启列存储优化时,获取数据库负载信息库中语句进行列存储优化建议分析,并根据分析结果将适用于列存储的语句生成列存储语句记录表的步骤包括:
开启列存储优化时,获取数据库负载信息库中语句;
将语句涉及的硬盘中的数据块全部读取到原数据缓存区内;
在原数据缓存区中的数据块中提取所有行数据;
将所有数据按列进行提取分离,再将分离提取的列数据按列存储方式整合到新数据块,然后存储到列存储内存区域中;
分别使用列存储内存区域中的数据和原数据缓存区中的数据执行一次SQL语句查询;
对SQL语句的两种存储方式的执行效率进行比对;
若列存储方式下SQL语句执行效率是原执行效率的第一阈值倍数,则记录该语句在列存储语句记录表中列存储方式的值;否则记录该语句在列存储语句记录表中原存储方式的值。
6.根据权利要求1所述的提高数据库SQL查询效率的方法,其特征在于,该方法还包括:
当数据被修改或删除后,修改原数据缓存区中该数据所在数据块,同时将修改的数据记录到列存储内存区域中的缓存变更区域中;
根据所述缓存变更区域中的数据定期变更到列存储内存区域中。
7.根据权利要求1所述的提高数据库SQL查询效率的方法,其特征在于,该方法还包括:
当数据新插入时,在原数据缓存区中构建数据块,同时将新插入的数据记录到列存储内存区域中的缓存变更区域中;
根据所述缓存变更区域中的数据定期更新到列存储内存区域中。
8.一种提高数据库SQL查询效率的装置,其特征在于,包括列存储判断模块、数据查找模块、列存储处理模块、查询响应模块;
列存储判断模块,用于当触发查询时,根据列存储语句记录表判断SQL语句是否适用于列存储;
数据查找模块,用于列存储判断模块判断SQL语句适用于列存储时,查找SQL语句使用的数据是否在列存储内存区域中;当数据不在列存储内存区域中时,查找该数据是否在原数据缓存区中;
列存储处理模块,用于若数据查找模块查找到数据在原数据缓存区中,在原数据缓存区中提取所需数据进行转换后存储到列存储内存区域;
查询响应模块,用于数据在列存储内存区域中时,根据语句使用列存储内存区域中的数据进行查询;还用于数据不在列存储内存区域中根据语句使用原数据缓存区中的数据进行查询。
9.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
存储器存储有可被至少一个处理器执行的计算机程序指令,所述计算机程序指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至7中任一项权利要求所述的提高数据库SQL查询效率的方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至7任一项权利要求所述的提高数据库SQL查询效率的方法。
CN202210724940.XA 2022-06-24 2022-06-24 提高数据库sql查询效率的方法、装置、设备、介质 Pending CN115455040A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210724940.XA CN115455040A (zh) 2022-06-24 2022-06-24 提高数据库sql查询效率的方法、装置、设备、介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210724940.XA CN115455040A (zh) 2022-06-24 2022-06-24 提高数据库sql查询效率的方法、装置、设备、介质

Publications (1)

Publication Number Publication Date
CN115455040A true CN115455040A (zh) 2022-12-09

Family

ID=84296362

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210724940.XA Pending CN115455040A (zh) 2022-06-24 2022-06-24 提高数据库sql查询效率的方法、装置、设备、介质

Country Status (1)

Country Link
CN (1) CN115455040A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117992461A (zh) * 2024-04-03 2024-05-07 深圳九有数据库有限公司 基于列式内存存储方式的数据库数据存储方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117992461A (zh) * 2024-04-03 2024-05-07 深圳九有数据库有限公司 基于列式内存存储方式的数据库数据存储方法

Similar Documents

Publication Publication Date Title
CN105320775A (zh) 数据的存取方法和装置
US20100082545A1 (en) Compression of sorted value indexes using common prefixes
CN107577436B (zh) 一种数据存储方法及装置
CN109726177A (zh) 一种基于HBase的海量文件分区索引方法
KR20020028208A (ko) 데이터베이스 오브젝트 통계의 실시간 수집 방법 및 시스템
CN113901279B (zh) 一种图数据库的检索方法和装置
CN116450656B (zh) 数据处理方法、装置、设备及存储介质
EP3570182B1 (en) Sparse infrastructure for tracking ad-hoc operation timestamps
TW201514734A (zh) 資料庫管理方法、資料庫管理系統,以及資料庫樹狀結構
JP2022016325A (ja) データ圧縮方法および装置、ならびにコンピュータデバイス
CN115455040A (zh) 提高数据库sql查询效率的方法、装置、设备、介质
CN114610708A (zh) 一种向量数据处理方法及装置、电子设备及存储介质
CN116521641A (zh) 基于数据湖的数据读写方法、数据读写装置以及存储介质
CN104657513A (zh) 嵌入式系统中档案操作与快速检索方法
CN113626464A (zh) 基于ClickHouse数据库内存数据的查询支持方法及系统
CN110413724B (zh) 一种数据检索方法和装置
CN116382588A (zh) 一种基于学习索引的LSM-Tree存储引擎读放大问题优化方法
CN108984720B (zh) 基于列存储的数据查询方法、装置、服务器及存储介质
WO2020238750A1 (zh) 数据处理方法、装置、电子设备及计算机存储介质
CN114546886A (zh) 一种值日志系统的空间回收方法
Afshani et al. Cross-referenced dictionaries and the limits of write optimization
KR102013839B1 (ko) 데이터베이스 관리 방법, 시스템 및 데이터베이스 트리 구조
KR20000041817A (ko) 음절 단위 패턴으로 구성한 패턴 테이블을 이용한 문자열 부분검색 시스템 및 그 방법
CN112463837B (zh) 一种关系型数据库数据存储查询方法
CN114138552B (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