多查询优化论文

2024-07-11

多查询优化论文(精选7篇)

多查询优化论文 第1篇

城市公交系统是城市建设的重要基础, 是城市现代化程度的标志, 是与城市居民生活联系最为紧密的环节之一。尤其在当今倡导“低碳生活”的大背景下, 公共交通系统更是备受推崇。许多国家的大中城市都在积极研究和发展本地的公共交通设施与服务[1], 公交优先已成为城市交通发展的基本战略。

近年来, 针对公交线路的选路问题, 设计了多种算法。然而这些算法主要存在以下几方面的不足:一是在公交查询设计时不能综合考虑不同乘客对经济成本、时间、换乘体验的不同需求;二是只涉及单一的交通方式, 鲜有能综合公交、地铁等多种交通工具的算法;三是计算多乘次数的路径的效率低, 一般只能提供换乘两次以内的查询, 不能适应城市快速发展的趋势和乘客的各种查询需求。

本文首先根据乘客需求, 将最佳线路的最优化目标分为换乘次数不限乘车时间最短、换乘次数最少乘车时间最短和车费最少乘车时间最短三种情况。在研究这类问题时, 最短路问题的常用最优化算法如Flyod、Dijkstra等不能直接使用, 因而多采用蚁群算法等智能算法, 但是智能算法存在着局部收敛和市实行差等缺陷, 并没有有效地解决上述问题。本文通过设计多指标权值图, 将乘车时间、换乘体验 (时间、次数) 、乘车经济成本等指标统一到同一个赋权有向图中, 以这个图为基础, 便能利用Dijkstra算法高效地求解上述三个问题的最优解, 取得了令人满意的效果。文章的具体安排如下:首先分析乘客的乘车需求, 继而设计算法, 最后是用实际数据验证算法。

1 乘客乘车需求分析

设计公交查询系统时, 必须了解乘客出行所考虑的各种因素, 通过对出行心理和行为的研究来设计高效实用的查询系统。相关文献的研究显示[2], 公交乘客的心理需求主要分为以下几类: (1) 快捷需求, 即花费时间短, 包括完成一次出行过程所需要的乘车和换乘的总时间; (2) 便利需求, 即换乘次数少, 指完成一次出行过程需要换乘公汽和地铁的总次数; (3) 经济需求, 即出行费用少, 包括一次出行过程所需支付的公汽和地铁的总费用。因此本文在设计查询算法时针对以下三种情况分别作为最佳求解目标:乘车总时间最短, 换乘次数最少前提下时间最短, 车费最低前提下时间最短。在此基础上构造3种目标对应的权重矩阵, 运用最短路理论建立规划模型分别求解满足三种需求的最佳路线。

除此之外, 不同乘客由于自身情况不同, 对各个目标要求也不一样, 还需根据实际情况综合考虑几种因素, 同时给出多种解决方案供乘客选择。

2 算法设计思想

公共汽车和地铁两种交通方式存在多种差异, 例如运行时间、换乘时间、票价规定等。为了便于算法的设计实现, 首先只考虑公汽间换乘, 在此算法的基础上再增加地铁与公汽换乘, 通过扩充权值矩阵, 实现不同交通工具的换乘算法。

对于公交系统来说, 最省时问题往往可以等价为最短路问题。这类问题通常可以采用Floyd、Dijkstra算法等。Floyd算法采用已知循环次数的循环遍历, 可以求解图中任意两点的最短路, 但算法复杂度较高;Dijkstra算法一次只能计算某一个点到任意一点的最短路, 但稳定性强, 复杂度低。这里算法通常依赖只能反映单一指标的赋权或非赋权图求解最优解。这样的图只能反映单一指标, 如描述换乘次数时就无法考虑换乘时间, 无法直接运用于具有复杂网络拓扑的城市公交系统。本文设计多指标赋权图, 将乘客对不同方面的需求统一到一个图中, 然后运用Dijkstra算法, 在换乘次数不限的前提下可以快速求解不同需求下的最佳路线。

2.1 仅考虑公汽线路时的算法设计

查询获得的路线一般由以下几部分构成:设出行过程需换乘l-1次共经过l条线路, 其中第i条线路经过mi个站点, 各条线路中站点之间历时相同均为b, 乘车费用为fi, 公汽之间每次换乘需要时间bb。

则出行过程总耗时,

出行总车费,

其中总耗时t对应乘客的快捷需求, 换乘次数l对应便利需求, 花费f对应经济需求。而l和f均要求在花费最小的情况下保证t最少, 因而属于多目标规划问题, 若直接使用Dijkstra算法求解会大大增加算法的复杂度, 不满足实际需求。因而需要在不同需求下对权值矩阵进行处理, 变多目标为单目标, 在保证正确性的前提下方便问题的求解。

2.1.1 乘车时间最短的算法设计

由 (1) 式可知, 乘车总时间由运行时间和换车时间构成, 乘

车时间最短即要求。无法直接使用最短路算法。作变换, 乘车时间最短可以等价为

式中, 把每条线路的运行时间都加上等待时间bb, 这样可大大简化处理, 最后在所得的总权值中减去bb即为实际花费的总时间。通过上述分析乘车时间最短目标需满足权值

直接采用最短路算法, 在权值满足 (4) 式的情况下求得的最短路, 即为乘车总时间最短的最佳线路。

2.1.2 换乘次数最少时乘车时间最短的算法设计

由 (1) 式可知, 要在总换乘时间bb (l-1) 最小时满足 (4) 式, 需将原问题转化为单目标规划问题。对于实际路况来说, 单条路线的站点数大约在20至40之间, 考虑采用惩罚策略, 给每条单一线路运行时间加上一个较大的惩罚值Pl, 这样就可以保证在换乘次数最少基础上实现乘车时间最短。

通过上述分析, 乘车次数最少且乘车时间最短的目标为,

直接采用最短路算法, 在权值满足 (5) 式的情况下求得的最短路, 即为换乘次数最少时乘车时间最短的最佳线路。

2.1.3 费用最少时乘车时间最短的算法设计

Algorithm design characterized by minimum traveling time with the least fare

此需求要在 (2) 式最小时保证 (1) 式最小, 采用类似3.1.2的思路将多目标优化转化为单目标优化问题。由于每条线路乘车费用较小, 对车费增大Pf倍加上运行时间, 得到每条线路的权值为

这样就可实现花费最小为第一目标, 时间最短为第二目标的最佳路线求解。出行完整路线对应的目标权值为

直接采用最短路算法, 在权值满足 (7) 式的情况下求得的最短路, 即为乘车费用最少时乘车时间最短的最佳线路。

2.2 同时考虑公汽和地铁线路时的算法设计

由于地铁与公汽的站点间运行时间, 换乘时间, 票价等均存在差异, 因此不能简单地把地铁线路等效为公汽线路进行处理。设相邻地铁站平均行驶时间s, 地铁换乘地铁平均耗时ss, 地铁与公汽间换乘平均耗时sb, 公汽与地铁间换乘平均耗时bs。

由于起点与终点均位于地铁站之外, 可以认为增加地铁线路时, 一旦进站必须经过出站才能到达目的地, 因此地铁线路的进站和出站是同时存在的, 即必有两次地铁与公汽之间的换乘。这样一来, 同时考虑公汽和地铁的线路中存在两种相邻站间时间b和s, 以及三种换乘时间bb、ss和bs。下面做适当处理, 使得权值矩阵能够较好地体现各种时间的关系。结合3.1.1的分析, 与公汽路线的处理类似, 每条地铁线路也应加上地铁间换乘时间, 见图1。

由于地铁和公汽发车间隔的不同导致, 又公交地铁相互换乘的对称性, 将公交地铁的互换时间平均分摊即地铁公交换乘的平均用时

此时, 整条线路多记了一次公汽间换乘时间和一次地铁间换乘时间, 因此出行总时间应为计算出的总权值减去 (ss+bb) 。设经过l1条公汽线路, 每条线路经过mi个公汽站, l2条地铁线路, 每条线路经过ni个地铁站, 总权值为

权值矩阵权值计算方法即为

直接采用最短路算法, 在权值满足 (7) 式的情况下求得的最短路, 即为同时考虑公汽和地铁时乘车时间最短的最佳线路。

采用惩罚策略, 加入惩罚值Pl, 换乘次数最少乘车时间最短情况下的目标权值为

加入惩罚值Pf, 费用最少乘车时间最短情况下的目标权值为

直接采用最短路算法, 即可求得同时考虑公汽和地铁时, 相关需求下的最佳路线。

3 算法的验证

利用文献[7]提供的数据进行计算, 该数据有520条公交线路, 共3957个公交站点, 两条地铁线路, 共39个地铁站点, 以及相关的换乘数据信息。求以下3对起始站——终到站之间的最佳路线: (1) S3359→S1828; (2) S1557→S0481; (3) S0971→S0485。

运用Dijkstra求最短路算法, 结合上述对应不同需求时的算法设计, 对所给数据进行求解, 同时考虑公汽和地铁, 得到换乘次数不限时间最短、换乘次数最少和乘车费用最少条件下时间最短的最佳路线。

4 结语

本文通过巧妙设计, 简化权值运算, 得到了同时考虑公汽和地铁路线时的一般出行路线, 对任意两个公交站点的最佳路线从乘车时间最短、换乘次数最少时间最短和车费最少三种情况分析求解, 能够满足不同乘客的需求, 较好地从实际情况解决公交线路选择问题。本算法不受限于换乘次数以及交通工具的种类, 稍加修改可以应用于一般交通出行的线路选择问题。但若投入实用, 还要增加其他考虑因素, 如交通拥堵增加的通行时间、乘客的步行时间等。

摘要:针对目前公交查询系统存在的问题, 根据乘客的不同需求, 分别从总时间最短、换乘次数最少以及费用最小几个角度研究, 设计了多指标赋权图利用Dijkstra算法求解公汽和地铁换乘方案的最佳路线选择算法。通过实际数据仿真验证, 本文提出的算法能够快速求解各种需求下的最佳路线, 具有较高的实用价值。

关键词:公交线路查询,Dijkstra算法,最短路,赋权图

参考文献

[1]Al-Sahili K.A.Bus preemption signal (BPS) :An Application of Advanced Public Transportation System (APTS) [J].Transpor-tation Research Part A:Policy and Practice, 1997, 31 (1) :68-69

[2]Heermann P.D., Caskey D.L.Intelligent Vehicle Highway System:Advanced Public Transportation System[J].Mathe-matical and Computer Modeling, 1995, 22 (7) :445-453

[3]Levinson H.S., Zimmerman S., Clinger J.Bus Rapid Tran-sit:Synthesis of Case Studies[J].Transportation Research Record, 2003, 1841 (1) :1-11

[4]Spiess H., Florian M.Optimal Strategies:A New Assignment Model for Transit Network[J].Transportation Re-search, 1989, 23 (2) :83-102

[5]Goczyla K., Cielatkowski J.Optimal Routing in A Transportation Network[J].European Journal of Operational Re-search, 1995, 87 (2) :214-222

[6]Nicholas A.K.A Data Model for Multi-dimensional Trans-portation Applications[J].International Journal of Geogra-phical Information Science, 1996, 16 (6) :551-569

浅析多关系SQL查询 第2篇

SQL是结构化查询语言 (Structured Query Language) 的缩写, 它是美国标准组织ANSI规定的标准数据库语言, 查询是SQL语言中最重要的组成部分, 它提供的Select语句用于检索和显示一个和多个数据库表中数据, 使用形式非常灵活[1]。它是迄今为止最重要的关系数据库操作语言, 在诸多领域都得到了应用和推广。一直以来, SQL以综合统一的强大功能和特点为人们所熟悉, 它不仅能实现数据定义, 还能实现数据控制、数据操纵、数据查询等功能。其中最广泛的应用就是数据查询功能, 用于实现查询的关键字SELECT也在整个SQL中应用最为频繁, 通过SELECT语句的构造和运行, 人们实现数据的筛选, 从而在关系中获得自己感兴趣的数据。习惯上人们根据查询数据来源的关系数目, 将SQL查询分解为单关系查询和多关系查询2类, 多关系SQL查询的实现往往相对复杂和困难, 却是对查询思维更好的一种锻炼。

1 多关系SQL查询语句一般形式

如果筛选的数据来自于多个基本关系, 那么就可以称为多关系查询, 最简单也是最基本的多关系SQL查询语句是在FROM子句后面跟上2个或2个以上的关系名称, 即:

以最常见的学生—课程数据库为例, 数据库中包含STUDENT, COURSE, SC三个基本关系[2]。下面的SQL语句就是一个典型的多关系连接查询, 实现找出选修课程的学生的学号、姓名、选修课程编号、成绩的功能。

在实际的应用中, 可以根据查询的具体要求添加ORDER BY子句, GROUP BY子句以及HAVING短语, 从而实现更灵活的查询以及结果处理。

2 多关系SQL查询实现中的关键问题

2.1 多关系SQL查询的构造

一般根据查询要求构造SQL语句时, (1) 要考虑的是数据的来源, 数据至少应该来自哪几个关系, 关系的数目尽量最少化, 这样FROM子句的内容就可以确定; (2) 这些关系之间有哪些联系, 结合查询的条件可以完成WHERE子句的构造, 这里如果有分组的需求和组内的筛选, 那么要完成GROUP BY子句以及HAVING短语的添加; (3) 希望得到的数据都包含哪些有机的组成部分, 结果需不需要进行排序, 完成SELECT子句和ORDER BY子句的构造。至此, 多关系SQL查询语句构造完成。

尽管这一过程的描述相对简单, 但是在具体实现过程中会遇到很多的问题, 比如说条件判断不准确, 结果集数据组成不准确等多类问题。在常年的数据库教学中很明显的发现, 学生对于这部分知识的掌握是不熟练的, 一般停留在模仿的阶段, 一旦出现和课本或习题不同类型的查询时往往难以顺利实现SQL语句的构造, 甚至于多关系中存在同名属性, 而结果集中需要这一属性时不写明属性的归属, SQL查询语句貌似正确但执行时却不能成立。因此, 如何将理论与实践相结合, 准确写出多关系SQL查询语句是最基本的, 也是最关键的一个问题。

2.2 多关系SQL查询的转换

就像一个编程的题目, 它的解法是不唯一的一样, 一个查询要求对应的SQL语句同样可以有多种形式, 尤其是在多关系查询中, 这显得更加普遍。仍然以前面提到的学生—课程数据库为例, 一个非常经典的查询就是查询至少选修1号课程和2号课程学生的学号。这一查询就可以用多条语句来实现。

2.2.1 连接查询 (自身连接)

这是连接查询中非常特殊的自身连接, 有的同学可能认为这不是一个关系上的查询吗, 怎么就归纳到多关系SQL查询里面了?但实际上, 人们完成这个查询要访问同一个关系两次, 因此, 可以得出它实际上是一个多关系SQL查询, 但关系本质上是相同的, 只不过有不同的别名。

2.2.2 嵌套查询

这里用到的就是嵌套查询中的不相关子查询, 这类查询很好的体现了SQL的结构化。

2.2.3 集合查询

这里选择了另外一种思路, 分别找出选修1号课程的学生学号和选修2号课程的学生的学号, 然后求交集, 这样也很容易理解。

综合上面的介绍会发现, 多关系查询的确能够解决用户提出的一系列的查询需求, 但是它并不一定是唯一的途径和方法。学习者在学习中从思想上理解多关系SQL查询的同时还要掌握它的转换, 换句话讲就是要明白它和其他类型查询之间是有关联关系的, 是可以相互转化的, 这样有助于人们对多关系SQL查询的进一步理解。

2.3 多关系SQL查询的优化

任何一个软件系统都在追求高的效率, 数据库系统也不例外, 就像程序有时空代价一样, SQL语句也是需要代价的, 尤其是多关系SQL查询中不可或缺的连接运算往往就会耗费相对多的执行时间, 那么如何来考虑多关系SQL查询的性能优化问题呢?笔者认为可以从以下方面入手。

2.3.1 遵循查询优化的基本规则

查询优化是数据库管理系统能自动完成的一项功能, 它有一系列的优化规则, 多关系SQL查询的优化也应该按照优化的基本规则进行。

2.3.2 做好相关辅助的工作

尽管优化的工作是由系统自动完成的, 但人们从来没有验证过其有效性, 当然, 这在日常教学中也不容易实现。事实上, 要知道优化器不是万能的, 对一些复杂的SQL语句, 优化器仅仅利用关系代数和数据字典是不够的, 仍需要用户利用熟悉的业务知识来帮助优化器找出较好的执行计划[3]。这样一来, 为了保证多关系SQL查询的性能优越, 可以在设计的阶段添加必要的索引, 提高查询的效率;此外, 可以再连接关系大于等于3个时想办法强制规定这些关系的连接顺序以帮助系统做出选择。索引的组织形式和关系连接顺序的强制规定在这里不作更深入的介绍。

2.3.3 多关系的物理优化

在最初设计数据库时应该充分的考虑运行阶段的一系列问题, 比如一旦出现多关系SQL查询时效率低下怎么办的问题。关系数据库的物理结构、执行引擎和查询优化器是影响数据库查询性能的主要因素。数据库物理结构的改变虽然不会影响应用的查询结果, 但会影响数据库性能[4]。在物理设计阶段可以针对存储方式和存取方法进行设计, 在后期的多关系SQL查询中有效提高查询的效率。

3 结语

总之, 多关系SQL查询的有效构造是数据库系统运行和应用中非常重要的一个部分, 它和所有的其它查询一样都发挥着各自的作用。今后如何让学生掌握的更好, 运用的更加灵活都是进一步研究多关系SQL查询的目标。

参考文献

[1]王瑜.Select-SQL查询教学内容的组织及教学方法探讨[J].福建电脑, 2010 (2) :45-46.

[2]萨师煊, 王珊.数据库系统概论[M].北京:高等教育出版社, 2000:82.

[3]李桂杰, 梅红.多关系SQL查询中连接顺序的优化[J].杭州电子科技大学学报, 2006 (4) :87-89.

多查询优化论文 第3篇

在信息系统中, 数据系统是进行信息管理的核心环节, 也是计算机得以运行的重要关节, 本文将对查询操作中的重要作用进行分析, 并突出查询操作在数据库操作中心中的重要地位。数据库中的查询操作是依照SELECT语句进行的操作。若信息系统中的数据信息已经存在有上千条记录, 则进行全系统的扫描将需要话费十分钟的时间, 若扫描的数据的速度较慢, 则需要一个小时。若使用比全表进行扫描, 将可以使用更好的扫描策略来大大的降低查询单额时间, 因此, 查询优化技术对于提高信息系统的工作效率具有至关重要的作用。

2 必要性分析

数据库中的查询优化不单单是RDBMS进行技术实现的关键性环节, 也可以突出整个系统的优势所在。查询优化使得系统的选择存取路径的压力大大降低。用户在使用的过程中只需要提出需要运行的指令, 并不需要操作整个运行的流程。数据系统在程序的优化方面具有很大的优势, 而且还可以使得表达查询的效率大大提高。因此, 查询优化的作用在进行查询和处理的阶段具有十分重要的作用, 当在数据库内部提交一个查询的语句时, 系统中的DBMS会对语句进行检查, 并把得到的语句应用在查询优化器中。而优化器在接收到数据库的语句命令之后, 根据数据系统中的优化方法进行语句的组成分析。SQL数据库中的优化器主要是依据成本优化器进行设计的。在给定查询分析的条件下, 其对分析出很多候选的查询计划, 同时对每个查询计划进行分析, 并得到查询计划的成本和结果, 根据分析的结果选择一个成本较低的运行。但是在实际的运行过程中, 查询优化器并不可能对每个成本进行优化, 并根据获得的信息进行估算, 因此, 查询优化器会综合分析查询计划的质量以及时间, 并做出平衡的分析, 最终得到一个最佳运行计划。SQL数据库把用户提交的语句当作是整个数据系统的优化出, 其对于系统的运行效率至关重要, 因此, SQL的语句是查询优化器运行的关键。

3 查询优化的途径

3.1 实现语句的规范化书写

为了使得SQL的运行效率提高, 我们需要对SQL的语句书写进行分析, 并实现语句的规范化。在语句的书写过程中, 注重语句的大小写等方面, 避免查询器进行二次解析, 进而在系统中执行两个不同的计划。

3.2 正确的使用索引

在所有的数据库对象中, 索引具有至关重要的地位。而SQL Server查询器是通过建立索引来进行优化查询的。所以, 我们需要在数据库系统的表格上建立较为合适的索引, 这样可以使得是表扫描被有效减少, 最终使得查询造成的开销降低。最终可以使得数据库的查询效率以及查询性能得到改变。然而在SQL Server中创建索引会使得系统的开销在时间上和空间上都有所增加。所以, 我们需要在此过程中合理的应用系统的查询需要, 斌使二者紧密结合, 最终达到优化和查询的目的。而SQL Server中的聚集索引在进行排序的过程中需要参照聚集索引字段的顺序。而其本身就是一种组织形式, 因此具有较高的运行效率。而所插入的记录的位置不是杂乱无章的, 而是需要按照一定的顺序进行, 若被插入的数据页没有空间, 则会导致数据页分裂。

3.3 使用%进行模糊查询时需要慎重考虑

在进行模糊查询的关键字中有%和_两个, 其中前者表示的是包含零个或者任意多个字符串, 而后者表示的是单个字符, 所以, 在使用%时需要慎重考虑。

3.4 连接查询优化分析

SQL Server主要有三种连接的方式。在进行连接的过程中要注意字段需要选择含有聚集索引的字段。实际中, 聚集索引的字段顺序已经得到确定, 所以需要进行两个表的数据进行连接。而若想保障执行的效率需要把A表和B表的数据进行连接。当需要对where的条件进行考虑时, 首先要做好运算选择, 并尽量控制A表和B表的结果集, 然后在进行连接。

3.5 存储过程的使用

存储过程中所使用的Procedure是一组可以完成特定功能的SQL Server语句, 其是在编译结束之后, 在进行存储的。其在进行存储的过程中囊括了逻辑控制语句以及数据操纵语句等, 因此, Procedure可以实现数据的接收、输出等。但是其在存储的过程中需要在数据库中进行编译, 并在数据库中进行存储, 因此, 在运行速度上与单独的SQL Server语句要快很多。此外, 在调用时仅仅需要使用存储的名字以及必要的参数信息, 所以可以减轻网络负担。

4 结语

综上所述, 我们在进行SQL Server的开发和利用的过程中, 可以使用查询优化器进而提高系统的整体性能。查询优化的优势在进行大量的数据查询中十分重要。本文对SQL Server查询优化器的原理进行分析, 并介绍了查询优化的优越性, 最终提出进行SQL Server查询优化的策略, 发现SQL Server的查询优化实际就是在保证结果正确的基础上, 使用优化器进行语句识别, 同时利用索引, 控制表扫描的I/O次数。当SQL Server收到用户的查询命令时, 可以根据优化措施来有效地缩短查询的时间, 保障查询的效率。这对于数据量较大的查询操作具有重要意义。因此, 为了使得海量数据的查询更加高效, 我们需要发挥SQL Server查询优化器的优势, 同时进行查询优化器的完善, 保障查询的质量。

摘要:在现代化技术的发展中, 随着数据数量的逐渐增加, 数据库的查询优化的重要性逐渐提高。而查询优化也成为了数据库的核心操作环节。数据技术的发展和数据的查询性矛盾逐渐凸显, 数据系统对于查询新能有了更高的要求。因此, 我们需要对数据库管理中的主要问题进行分析, 突出查询优化的功能。本文将对SQL Server查询优化器原理与优化进行分析, 望给相关的从业人员提供帮助。

关键词:SQL,Server,查询优化器,原理,优化

参考文献

[1]刘维学.SQL Server查询优化器原理与优化实例分析[J].计算机技术与发展, 2013 (8) .

[2]未培.SQL SERVER查询优化实证研究[J].山东农业工程学院学报, 2014 (05) .

多查询优化论文 第4篇

关键词:XML查询,XML多分支路径查询,XML编码

0 引 言

XML数据查询尤其是结构复杂的XML数据查询是一项重要的研究课题。XML数据查询主要分为单路径查询和分支路径查询。单路径查询语句形如a//b/c, 目前针对单路径的查询方法有A (K) [1]、D (k) [2]、APEX[3]、1-index[4]、XISS[5]、DataGuide[6]等, 其基本思路是对XML文档树建立路径索引, 有效地减少查询单路径的时间。XML分支路径查询研究较少, 国内尚无相关文献报道。目前解决分支路径查询的一般方法可分为两种: (1) 首先将分支路径查询拆分成由根结点到叶子结点的单路径, 并通过结构连接算法[7,8]得到单路径的查询结果, 然后将所得到的单路径查询结果进行连接操作得到分支路径查询结果。例如, 查询分支路径a[b=‘c’]//[d=‘e’], 首先将该分支路径进行拆分得到两个单路径a//b/c和a//d/e, 然后利用结构连接算法分别得到这两个单路径的查询结果, 最后将两个单路径的连接结果进行连接操作, 得到最终满足条件的分支路径查询。 (2) 将分支路径拆分成结点对, 分别对结点对进行查询, 最终将结点对连接成分支查询结果。例如, 查询分支路径a[b=‘c’]//[d=‘e’], 首先将其拆分成a//b, b/c, a//d, d/e然后分别对这些结点对进行查询, 最后将查询的结果进行连接操作。方法 (1) 由于拆分操作产生了多条单路径, 在将单路径连接成多分支路径的算法中采用循环比较方法, 效率低。方法 (2) 将多分支路径拆分成结点对, 将会得到大量的中间结果, 在对这些中间结果进行连接操作时, 效率同样低。为了避免XML多分支路径查询过程中多条单路径的连接操作而带来的查询效率低的问题, 本文提出了一种高效的XML多分支路径查询算法MBPQ, 该算法同样是将多分支路径查询转化为单路径查询, 但是它与现有的XML多分支查询的处理过程不同。它首先对XML文档和被查询的多分支路径结点分别按照各自不同的方式进行编码, 然后将被查询的多分支路径拆分成单路径, 并进行单路径查询, 利用栈匹配具有共同祖先结点的单路径查询结果, 最后得到多分支路径查询结果。实验表明, 与现有的XML多分支查询一般算法相比, 算法MBPQ的查询效率高。

1 XML结点编码与结点索引

算法MBPQ首先对XML文档进行编码 , 本文提出的编码方法是:将XML文档看作是流文件, XML文档树中的每一个结点在解析文档时根据每个标签在文档中出现的先后次序赋予两个序号begin和end。其中begin代表文档标签的开始位置, end代表文档标签的结束位置。以图1中的XML文档为例, <PLAY>标签记为1, <PGROUP>标签记为2, <PERSONA>标签记为3, 直至文档最后一个标签</PLAY>为105, 所以, PLAY标签的编码为 (1, 105) , PGROUP标签的编码为 (2, 12) 等等。对于图1所示的XML文档, 其对应的文档树及其编码如图2所示。显然, 祖先结点u的编码区间[begin (u) , end (u) ]包含后裔结点v的编码区间[begin (v) , end (v) ]。

根据XML文档树中每个结点的编码, 建立XML结点索引。在进行单路径查询时, 利用该索引就可以快速得到结构连接算法所需要的结点集合。

推论 设文档树中的任意两个结点u和v是祖先/后裔关系, 当且仅当begin (u) <begin (v) <end (v) <end (u) 。特别地, 若两个结点u和v是父子关系, 当且仅当begin (u) <begin (v) <end (v) <end (u) 且u.level=v.level-1, 其中level表示结点位于文档树中的层次。

2 多分支路径查询一般算法

本文将多分支查询一般算法称为算法pathjoins, 其基本思想是:首先对查询树进行编码, 将其拆分成由根结点到叶子结点的单路径, 并用pathstack算法[9]得到单路径查询结果, 然后将单路径查询结果利用结构连接算法进行匹配得到多分支查询结果。

为了在查询匹配算法中进行高效的路径连接, 我们对查询树各个结点采用了特别的编号方法。设查询树根结点的编号为“0”, 其孩子结点的编号由其父结点的编号和其属于其父结点的第几个孩子结点组成。如图3中“ACT”结点, 其父结点“PLAY”的编号为0, 且属于“PLAY”结点的第一个孩子结点, 因此结点“ACT”的编号为01。结点“PGROUP”属于PLAY的第二个孩子结点, 所以其结点编号为02。

下面以查询语句PLAY[/ACT[//SCENE[/SPEECH][/STAGEDIR]][//SPEECH[/SPEAKER][/LINE]]][//PGROUP[/PERSONA][/GRPDESCR]]为例, 说明算法pathjoins的执行过程。

(1) 将查询语句用查询树 (图3) 表示, 并对查询树进行编码, 同时按照查询树从左到右的顺序将多分支查询语句拆分成单路径查询条件, 如表1所示。

(2) 使用pathstack算法[9]得到所有单路径的查询结果。

(3) 利用结构连接算法进行单路径匹配得到分支路径的查询结果。

3 多分支路径查询算法MBPQ

3.1 算法思想

算法MBPQ同样是将多分支路径查询转化为单路径查询, 但是它与上述XML多分支查询算法的单路径匹配方法不同。其基本思想是:

(1) 将查询语句用查询树表示, 并对查询树进行编码, 同时按照查询树从左到右的顺序将多分支查询语句拆分成单路径查询条件。

(2) 执行pathstack算法[9]得到单路径的查询结果。

(3) 利用栈控制匹配过程, 按照查询树从左到右、自底向上的顺序匹配具有共同祖先结点的单路径查询结果, 从而得到多分支路经查询结果。

3.2 执行过程及举例说明

下面以查询语句PLAY[/ACT[//SCENE[/SPEECH][/STAGEDIR]][//SPEECH[/SPEAKER][/LINE]]][//PGROUP[/PERSONA][/GRPDESCR]]为例。说明算法MBPQ的执行过程。

(1) 将查询语句表示成查询树, 并进行编码, 如图3所示, 同时将多分支路径查询条件拆分得到单路径P1、P2、…、P6, 如表2所示。

(2) 执行pathstack算法[9]得到各个单路径的查询结果, 其单路径条数如表2所示。例如, P1在XML文档树中的查询结果有2条。

(3) 匹配具有共同祖先结点的单路径查询结果, 获得多分支路经查询结果。为了减少不必要的匹配, 我们利用栈控制匹配顺序, 按照查询树从左到右、自底向上的顺序进行匹配。匹配过程如下:若栈为空, 则第一条单路径入栈。在第i条单路径入栈之前, 首先比较其分支编号是否与栈中单路径的分支编号相同, 若相同则单路径继续入栈, 若不同, 则表明栈中的若干单路径具有共同祖先, 栈中单路径可以进行匹配。

栈中单路径匹配完毕后将分支结点编号的最后一个分支结点编号删除, 并记录下子树查询结果, 其余单路径出栈, 继续判定将要入栈单路径和栈顶单路径的分支结点编号, 步骤和上述步骤相同。所有单路径处理完毕后栈中保存着最后将要匹配的子树。

将栈中子树匹配得到多分支路径查询结果。以表2所示单路径为例, 首先PLAY (0) /ACT (01) //SCENE (011) /SPEECH (0111) , PLAY (0) /ACT (01) //SCENE (011) /STAGEDIR (0112) 入栈, 当第三条路径PLAY (0) /ACT (01) //SPEECH (012) /SPEAKER (0121) 将要入栈时, 其单路径中分支结点编号和栈顶单路径的单路径中分支结点编号不相同, 此时处理栈中的单路径, 处理完毕后可知有3个匹配子树, 记录下匹配子树, 栈中单路径除第一个入栈单路径以外其余单路径出栈, 将栈中单路径的分支结点编码中的最后一个分支结点编码删除, 即栈中单路径为PLAY (0) /ACT (01) //SCENE (011) /SPEECH (0111) , 分支结点编码为0, 01, 重复执行上述步骤直到单路径处理完毕, 栈中只留下PLAY (0) /ACT (01) //SCENE (011) /SPEECH (0111) , 分支结点编码为0, PLAY (0) //PGROUP (02) /PERSONA (021) 分支结点编码为0, 此时表明图3所示查询树的左子树和右子树已经查询完毕, 下面只要将左子树和右子树进行匹配得到最终的多分支查询结果, 匹配完毕可知图2的XML文档树中共有22个图3所示的查询子树。

3.3 算法MBPQ描述输入:查询树root;

输出:多分支查询结果。

算法描述:

4 实验及结果分析

为了验证算法MBPQ的效率, 我们利用VC++实现了算法MBPQ。实验环境为:Pentium Ⅳ1.60G CPU, 256MB内存, Windows 2000。实验数据为莎士比亚XML数据集[10]。

在实验中, 我们测试了莎士比亚XML数据集的10个分支查询语句, 查询语句如表3所示。对于多分支路径查询, 分别使用算法MBPQ和算法pathjoins进行查询。它们的查询效率如图4所示, 结果表明算法MBPQ的性能明显优于算法pathjoins。

由图4可以看出, 当由查询树拆分得到的单路径大于两条时, 算法MBPQ的执行效率要优于算法pathjoins, 如查询语句p3, p4, p5, p6, p7, p8, p9, p10;当查询树仅有一个分支结点, 即拆分得到两条单路径时, 如查询语句p1、p2, 算法MBPQ的执行效率和算法pathjoins差不多。

5 结束语

对XML文档实现多分支路径查询, 一般方法是将多分支路径拆分成若干个单路径, 对单路径分别进行查询, 然后再对单路径查询结果进行连接操作, 这样的算法效率低。而本文算法MBPQ为实现XML多分支路径快速查询提供了一种对单路径查询结果进行匹配的有效方法, 即利用栈匹配具有共同祖先结点的单路径查询结果, 从而大大提高了查询效率。

参考文献

[1]Kaushik R, Shenoy P, Bohannon P, et al.Exploiting Local Similarity forEfficient Indexing of Paths in Graph Structured Data[C]//10thInter-national Conference on Database Theory, San Jose, California, USA, 2002:129-140.

[2]Chen Q, Lim A, Ong KW.D (k) -index:An adaptive structural summa-ry for graph-structured data[C]//Proc.of the 2003 ACMSIGMOD In-tl.Conf.on Management of Data, San Diego, California, USA, 2003:134-144.

[3]Chung C, Min J, Shim K.APEX:An adaptive path index for XML data[C]//Proc.of the 2002 ACM SIGMOD Intl.Conf.on Management ofData, Madison, Wisconsin, 2002:121-132.

[4]Milo T, Suciu D.Index structures for path expressions[C]//7thInter-national Conference on Database Theory, Jerusalem, Israel, 1999:277-255.

[5]Quanzhong Li, Bongki Moon.Indexing and Querying XML Data forRegular Path Expressions[C]//Proceedings of the 27thVLDB Confer-ence, Roma, Italy, 2001:361-370.

[6]Roy Goldman, Jennifer Widom.DataGuide:enabling query formulationand optimization in semistructured databases[C]//23th InternationalConference on Very Large Data Bases, pages, Athens, Greece, 1997:436-445.

[7]Al-khalifa Bruno N, Koudas N, Srivastava D.Holistic Twig Joins:Opti-mal XML Pattern Matching[C]//Franklin M J et al Eds.Proceedingsof the 21thACM SIGMOD International Conference on Management ofData.Madison, Wisconsin, USA, 2002:310-321.S, Jagadish HV, Koudas N.Structural Joins:A Primitive for Efficient XML Query Pat-tern Matching.In:Hiong Ngu A H et al Eds.Proceedings of the 18thIEEE ICDE International Conference on Data Engineering.California, USA, 2002:141-152.

[8]Chien S Y, Vagena Z, Zhang Donghui, et al.Efficient Structural Joinson Indexed XML Document[C]//Papadias D et al Eds.Proceedings ofthe 28thVLDB International Conference on Very Large Database.HongKong, China, 2002:263-274.

[9]Bruno N, Koudas N, Srivastava D.Holistic Twig Joins:Optimal XMLPattern Matching[C]//Franklin MJ et al Eds.Proceedings of the 21thACM SIGMOD International Conference on Management of Data.Madi-son, Wisconsin, USA, 2002:310-321.

数据库查询优化研究 第5篇

关键词:分布式数据库,并行数据库,查询优化技术

近年来,随着信息技术的快速发展,数据库技术应用越来越广泛,已成为信息化建设的核心。目前应用最广泛的数据库主要有两类,分别是分布式数据库和并行数据库。其中,由于网络技术的快速发展,分布式数据库已得到了广泛的应用。并行数据库在许多方面也得到了很好的应用。所以提高数据库的效率已成为迫切的任务。其中,查询是数据库中最常用操作,同时也是用户操纵、维护数据库中的数据的唯一途径。用户对数据库性能的直接感觉就是数据库管理系统对查询的处理是否高效、快速。查询处理的效率在很大程度上决定了数据库管理系统的性能。所以提高查询效率已成为数据库研究的热点。

现在我们看看,查询优化的发展:由CCA公司开发的SDD-1采用的查询优化方法是对逻辑关系用基本的运算操作来缩减;IBM公司设计的R*采用直接连接作为查询处理策略,同时为提高查询效率采用了动态规划的方法;加州大学伯克利分校研制的INGRES采用基于分解的优化算法;ORACLE是一款十分优秀的商业数据库,采用基于代价的优化或基于规则的优化找出一个执行代价较低的执行计划,由于在确定数掘的分布时,引入了直方图来描述数据值的分布而不是假设数据值是均匀分布的,从而大大提高了代价估计的精确度。可见,数据库查询优化已得到了快速的发展,从理论研究到了实践工程应用,并且在实际工程中的作用已经越来越重要了,特别是在实时数据库系统中尤为突出。数据库查询优化已成为数据库发展的一个重要研究方向。论文主要研究分布式数据库的查询优化问题,同时简单介绍并行数据库查询优化的常用方法及发展趋势。

1 数据库查询优化方法详解

为了让大家能清晰的了解数据库查询优化的主要方法,论文从两个方面来研究数据库的优化问题。首先介绍分布式数据库的查询优化技术,在该部分侧重于方法和策略的描述,不涉及到具体的算法。然后,研究一下并行数据库的查询优化技术,在该部分侧重于具体算法的论述。通过这两部分内容,就能较全面的为大家展现数据库查询优化技术的内涵。

1.1 常见分布式数据库查询优化方法

在分布式数据库中,我们进行查询优化的主要目标就是以最小的总代价,在最短的时间内获得所需的数据。它的实现既与通信时间有关,也与局部处理时间相关,根据不同的互连网络状况可以有不同的查询优化策略。总体上,可分为5个方面。

1) 基于关系代数的优化方法:

数据库查询操作的基础就是关系运算,所以利用关系代数变换来实现查询优化是目前最常见的方法。其主要原理就是通过关系代数的等价变换,从而减少查询中的计算量,进而实现查询的优化。主要原则就是在关系运算中尽量避免直接执行运算量较大的笛卡儿积运算,而采用先执行关系代数表达式中的选择和投影操作,后把笛卡儿积操作之前和之后的一连串选择和投影合并起来一起做。这样就能减小运算量。该方法主要用于删除无用数据,从而减小运算,主要作为预处理使用。

2) 基于直接连接查询的优化方法:

该方法的着眼点在于连接,通过研究关系的静态属性来构建一个最好的处理策略和连接顺序。在分布式数据库中,主要采用的优化策略为:

第一种,利用站点依赖信息来实现。就是在关系进行连接运算时,首先将同一站点上的子片段进行连接,然后再传输到目标站点上进行合并。该方法的主要优势是站点间无数据传送代价,并可利用本地索引信息加速连接。第二种是分片和复制算法。该方法就是将查询需要的关系的片段分配到选定的站点上,然后将其它关系进行复制,目的是让选定的站点上都搬出完整的关注,第三步就是在各站点上进行直接连接操作,最好将结合传到目的站点,该方法的主要优势是响应时间更短,但存在数据冗余的缺点。第三种是站点依赖和数据复制结合。该方法结合站点依赖信息和数据复制信息,减少关系片段的复制,使特定查询能以无数据传输的方式进行,从而缩短响应时间。最后一种方法是采用Hash划分策略。该方法采用Hash函数将关系根据连接属性进行片段划分,使得连接的两个关系之间满足站点依赖,以根据站点依赖方法进行连接查询。基于直接连接查询的优化方法由于传输代价太大,所以只适合于查询处理慢,传输快的高速局域网场合。

3) 半连接优化策略:

从上述基于直接连接查询的优化方法的论述中,我们可以看到该方法的主要缺点就是在不同站点间传输的数据量太大,针对这一缺点,开发出了半连接优化策略。该方法的主要特点是通过投影和连接运算可以有效的减少操作关系的大小,从而减少站点之间的数据传输量,以尽可能只传输参与连接的数据,减少了数据传输时间,降低了CPU和磁盘I/O代价,提高了查询效率;但半连接也会导致通信次数的增加和局部处理时间的增加,适用于传输代价高而局部处理时间短的场合。该方法的主要目标是能够有效降低站点间的数据传输量,从而降低网络传输代价,由于半连接不具有对称性,连接顺序的不同会导致中间结果大小的不同,因此基于半连接的多关系分布式查询优化算法的目标就是找到一个最优的半连接执行顺序,使得产生的中间结果最小,以降低网络传输代价,缩短查询响应时间。

为了进一步的提高半连接优化策略的效果,还设计了双向半连接策略和全归约技术。其中,双向半连接策略通过两次半连接将关系R和S完全归约,减少了网络间数据传输的代价,适用于明确要求将关系R和S传送到第三站点进行连接的情况。其中,全归约技术首先将所有关系的前导属性传送到一个站点进行连接操作,再将连接结果中的属性分别传回原节点,对原关系进行归约以得到所有的有效元组,最后将有效元组传送到目的节点进行连接。该方法是对半连接技术的加强,其最大限度的对分布式数据库中的关系进行了归约,在传输过程中只传送查询结果中要包含的元组,减少了传输代价。全归约算法不依赖于关系的静态特性,不需要对静态特性的维护,提高了准确率;不需要搜索对比所有可能的半连接操作程序,并减少了通讯代价。但当一个关系中具有多个连接属性时,多个连接属性投影后得到的临时关系可能会很大,与原关系记录数相差不多,这时传输代价较大。

4) 索引优化:

为提高查询的速度,通常会采用索引技术,该技术能够减少查询搜索的时间,从而优化查询效果。目前在数据库查询优化中主要采用3类索引技术,分别是:散列索引、基于树的索引和位图索引。其中,由于索引表需要占用内存空间,为减小系统开销,一般采用散列索引。散列索引的主要优势就是索引表占用的内存空间小。曾有学者提出“通过散列表保存关系中关键值的上下限记录位置,以确定一个小于整个表的扫描范围,以此减少扫描时间。”,还有学者对散列技术进行了改进,提出了双层的查询优化算法和双项的查询优化算法。其中双层的查询优化方法的主要原理是:通过建立双层散列,在散列表之上再加一次散列,以适应散列表较大时的情况。而双项的查询优化算法中对散列表增加了一个记录号次下限和次上限,以更精确的定位记录所在的区域,并减少删除、修改操作对散列表信息及查询优化效率的影响。

索引技术的本质就是利用添加限制条件来减少扫描的数据量,该方法对局部数据库查询有利,但在分布式数据库中由于建立索引较难,所以一般不采用。

5) 查询优化搜索策略:

上述4种方法是查询优化中最常见的方法,它们能够有效的降低查询处理的时间。但是如何有效的应该这些技术来实现一个最优查询方案是十分复杂的。目前查询策略表示主要有两类, 一类是基于图的查询优化,另一类是基于树的查询优化。其中,基于图的查询优化是目前最常用的搜索策略,它的主要思想是通过关系的静态属性计算两个关系的连接代价,依次将图中代价最小的两个站点进行连接合并,直到无法继续合并为止。如果能将查询台与其它优化策略如半连接结合起来,就能实现更加有效的查询。基于树的查询优化主要目的是生成一棵具有最小代价的查询树,并可通过树中连接操作的并行执行来进一步缩短查询响应时间。但由于在树的搜索算法中没有考虑到连接执行后其它边上的代价会发生改变的情况,即没有考虑到当前连接对之后连接的影响,而且所采用的贪婪搜索策略并不能保证最后的总代价一定是最小的。另外,基于树的搜索算法不适于环查询的情况,当查询图中存在环路时基于树的搜索策略无法满足所有的连接限制条件。

目前我们采用的搜索策略主要分为3类,分别是穷尽搜索策略、随机搜索策略以及启发式策略。其中,穷尽搜索策略是列出所有的组合顺序,并进行比较,这样就能找到最佳的查询方案。但该策略的最大缺陷是由于实际运算的复杂度太大,导致该策略部具有实际应用价值。随机搜索策略就是以一个随机状态作为出发点,并与随机选择的相邻状态进行比较,从而获得更加的状态,通过反复比较就能获得近似的最佳情况。该策略的主要优点是算法的空间复杂度较低,满足工程要求,但主要缺点是时间复杂度很难确定。常用的算法有代改进算法、模拟退火算法。其中,启发式策略具有多项式级的时间和空间复杂度,但其生成的可能并不是最优的查询计划,而是一个近似的最优解。这类算法的典型代表有贪婪算法等,常见的有SDD-1算法。

1.2 常见并行数据库查询优化方法

并行数据库的优化方法是目前研究较深入的部分,对整个数据库查询的优化具有重要的研究价值。从大的方面来看,可以分为4类,分别是基于查询树的传统优化方法、多重加权树优化方法、语义查询优化方法以及基于遗传的优化方法。其中,基于查询树的传统优化方法主要包括基于左线性树的查询优化算法、基于右线性树的查询优化算法、基于片段式右线性树的查询优化方法、基于浓密树的查询优化算法和基于操作森林的查询优化算法。多重加权树优化方法够处理最常用的选择一投影一连接查询,支持多种并行连接算法,包括流水线缓冲区的存储器优化分配算法、数据操作的处理机与存储器优化分配算法和连接操作实现算法的优选算法。语义查询优化方法包括传统语义查询优化方法和基于Agent技术的语义查询优化方法。目前研究较多的是基于Agent技术的语义查询优化方法。该方法利用人工智能中的Agent技术来实现并行数据库查询优化的优化。该方法采用Multi-Agent技术自动查找与给定查询有关的完整性约束条件,然后,修改给定的查询为更有效的等价查询,使得多个关系间连接操作的效率得到很大的提高,从而达到查询所期望达到的减少连接操作、缩短查询时间的优化效果,实现了基于Agent的语义查询优化。基于遗传的优化方法是目前发展较快的一种全局优化方法,它借助于生物学的遗传观点。可以明显的提高个体的实用性,从而实现更加的查询优化效果。

曾有学者对上述几类并行数据库查询优化方法进行了系统的比较研究,他得出的结论是基于遗传的优化方法是效率最高的方法。当然,我们也应看到基于遗传的优化方法方法目前还存在算法过程较复杂的缺点,但我们也必须意识到该方法是很有前途的一种方法。

2 结论

随着信息技术,特别是网络技术的快速发展,人们对数据库的效率要求更高,实时数据库领域尤为突出。查询是数据库操作最普通、最常用的操作之一。提高查询的效率就能明显的提高数据库的效率,所以数据库查询优化技术就越发重要了。论文主要从分布式数据库和并行数据库两个方面来论述数据库查询优化技术。在分布式数据库部分,侧重于方法和策略的研究,主要论述了5个方面。在并行数据库部分,侧重实际算法的介绍,主要介绍了4类算法,并指出基于遗传的优化方法是目前效率最高,最有前途的方法之一。

当然,我们也要认识到查询优化的核心就是减少操作的数据量,从而降低处理的代价。所以,我们在研究中,可以引入更多的人工智能、线性控制以及其其它方面的理论来提高优化的效率。同时,我们还有认识到每类优化策略或方法都有其特殊的应用场合,只有合理的应用优化策略才能实现高效的查询效果。我们可以预测随着相关学科的发展,查询优化技术必将获得更大的发展。

参考文献

[1]邵佩英.分布式数据库系统及其应用[M].北京:科学出版社, 2005.

[2].S.Pramanik, D.Vineyard.Optimizing Join Queries in Distributed Databases[J].IEEE, 1988, l4 (9) :1319-1326.

[3]Chiping Wang, O.K.Li, L.P.Chen.Distributed Query Optimization by One-Shot Fixed-Precision Semi-Join Execution[J].Seventh Interna-tional Conference0n Data Engineering, 1991:756-763.

[4]王小平, 曹立明.遗传算法—理论、应用与软件实现[M].西安:西安交通大学出版社, 2002:123-140.

[5]徐丽萍, 金雄兵, 赵小松.并行数据库查询优化技术研究[J].华中科技大学学报 (自然科学版) , 2006, 34 (3) :11-13.

多查询优化论文 第6篇

传统的信息管理系统中的查询模块对操作人员的要求较高,需要使用者对数据库的结构有清楚的了解并能熟练的使用相关的查询命令,而且在进行查询时一般只能选择设计好的关键词段进行查询,不能输入随机字段进行查询操作,也不能使用多条件组合查询的功能,查询交互式界面不够直观、简洁[1]。随着微软的新一代企业级开发平台Visual Studio.NET的推出,目前大部分企事业单位使用的信息管理系统都是基于该平台的或者逐步地向该平台进行转换,因此,在.NET的平台上,开发有效的多条件组合查询模块实现模糊查询和多条件组合的查询成为当前信息管理系统设计中的重要内容。

1 系统功能分析

传统信息管理系统中的查询模块由于功能单一,不能根据用户需求自由组合查询条件,缺乏健壮性,已经不能满足信息系统对查询项目不确定性及全面性的要求。新型的信息系统查询模块中查询关键词可以动态的由用户给出,查询条件由用户自由组合,并支持模糊查询,从而实现查询结果的准确性和多样性[2]。

1.1 设计目标

现代信息管理系统中查询模块可以允许用户进行如下操作,根据用户输入的任意多个检索条件对数据库进行检索,其中检索条件中众多的检索项对应于数据库中多个表的不同的字段,检索条件间的逻辑关系可为多层复合关系,并且条件可以由用户设定。

一个好的查询模块应该能同时满足通用性和方便性的特点,专业程序设计人员只需改动查询文件路径,就可以轻松将查询代码移植到不同系统中,减少代码的重复编写,提高开发效率。普通用户可以根据需求创建查询条件,没有任何限制。能够在不知道用户如何定义查询条件的情况下,准确获取用户的需求,并且能够按照语法规则动态的生成查询语句并显示查询结果[3]。

查询模块作为用户使用最频繁的模块,应该做到界面友好,符合日常的操作习惯,具有一定的容错性,允许用户操作失误,对误操作给予明确的提示并及时纠正,并对系统错误代码给予提示,避免误操作造成系统故障等。

1.2 功能和结构分析与设计

现代信息管理系统中的查询模块,除了具备传统的查询模块中必要的查询功能外,还应具备模糊查询和多条件组合查询的功能,从而满足查询方式的多样化和实现查询结果的完备性等要求。

1.2.1 模糊查询功能

精确查询是查询中的一种方式,精确查询需要用户指定准确的查询条件,并查询到符合条件的结果,然而,在多数情况下,人们不能准确知道作为查询条件的字段内容,于是模糊查询在这种情况下就非常重要了。目前主流的数据库是关系型数据库,它们是以布尔逻辑为基础的,所以对于一个查询条件,数据库中的一条记录要么满足要么不满足。但是我们语言的一个很大特点就是具有模糊性和不精确性,在许多情况下,用户对查询并不要求给出一个精确匹配的结果,只要求结果在一定程度上满足条件即可,这些特点应该查询条件及结果显示上得到一定的体现。

1.2.2 多条件组合查询

在现代的信息管理系统中,多条件查询[4]的运用越来越普遍,多条件必须按照一定规则组合才能使查询得出正确结果,而组合方式可能有许多种,多条件组合查询模块中,模块分为条件设定和结果显示两个部分,条件设定模块,即参数设定模块,用于用户选择查询项目和查询条件,查询条件的数目可以根据查询的要求进行增减,用户也可根据需要选择多个字段进行组合,从而使查询功能具有很强的动态性和自定义性。结果显示模块将根据用户的输入对远程数据库或本地数据库进行查询并显示查询结果,结果显示部分可以依赖XML文件而独立运行,方便移植到其他的系统中作为其专用查询模块,具有一定的通用性,两者结合起来就形成了条件组合通用查询模块。

2 基于.NET的查询功能的实现

2.1. NET平台下数据库的连接

ADO.NET是一个包含在Microsoft.NET框架中的类库。它可以帮助.NET应用程序访问各种数据源,从而实现对数据库进行访问等操作,ADO.NET连接数据库主要通过Connect ion,Command,Data Adapter和Data Set等对象来实现。其中Connection对象负责连接数据库,Command对象负责对数据库下达操作的命令,Data Adapter对象负责把数据从数据源取回或将修改后的数据存入数据库,最后使用Data Set对象保存当前数据集。他们之间的关系如图1所示。

2.2 模糊查询的实现

模糊查询功能所要解决的问题是在关系模型中哪些方面引入模糊性,从而使得现实世界中的某些不确定或不精确信息在数据库中得到反映。模糊查询的实现是指通过使用模糊集合或具有模糊特征的语言词对数据库进行查询,查询标准或查询条件可包含模糊集合或语言词,而数据库本身没有要求[5]。

在.NET中,模糊查询可以使用SUBSTRING函数来实现模糊查询,SUBSTRING函数返回一个字符串的子串(从n1开始,共n2个字符)。其格式为:SUBSTRING(string fromn1 to n2)

如:SELECT SUBSTRING(CUSTNAME FROM1 FOR 10)FROM CUSTOMER

其意为返回CUSTNAME的头10个字符。但SUBSTRING函数只能实现一定字段的模糊查询,而且本身区分大小写,需在程序中增加代码以提高其模糊度,程序代码较长,比较烦琐,我们在系统中,采用SQL的Select查询命令结合相关控件来实现数据库的模糊查询。

在Data Grid View控件中使用“LIKE”关键词和“%”通配符作为条件可以做到模糊查询。下面语句在student.mdb数据库的info表中模糊匹配符合“姓名”字段的值的所有记录。

例如,我们在按姓名字段查找时,查询姓名字段中包含“张”的所有记录,结果如图2所示。

查询结果在显示模块中列出所有“姓名”字段中包含“张”字的记录,从而实现了模糊查询的功能。

2.3 组合条件查询的实现

2.3.1 查询条件的确定

在查询模块设计中,如果要进行组合条件查询,则要用逻辑运算符构成多个条件之间的关系,逻辑运算符主要通过设置相应的组合框进行选择,查询时程序代码中根据组合框的选择情况动态生成查询条件,最后检索出符合条件的记录。因此,在程序设计过程中,我们需要在组合条件之间增加组合框来选择条件之间的逻辑运算符,通常可以设置“AND”和“OR”两个选项来表示“与”和“或”两种逻辑关系[6]。

2.3.2 查询方法

程序设计过程中,我们首先通过ADO.NET中的相关对象实现数据源的连接,查询的实现是通过Ole Db-Data Adapter的Command Text属性存放SQL语句,然后通过Fill方法填充数据源,通过Data View与Data Gridview进行数据绑定,在进行查询时,通过生成Data View的筛选条件,然后设置Row Filter属性来实现数据的检索。动态生成查询条件的语句和Row Filter的属性设置的部分代码如下:

例如,查询姓名字段中含有“张”并且性别为“男”的同学的信息,输入查询条件后,查询结果如图3所示。

查询结果显示了“姓名”字段中包含“张”并且“性别”为“男”的所有同学的基本信息,实现了多条件组合查询的功能,在实际的系统中,我们设计了姓名、性别和院系等字段的组合条件的设置,从而,实现了多条件的组合查询功能。

3 结束语

在实际的信息管理系统中,以上模糊条件检索和组合条件查询功能的实现不仅极大地方便了用户自定义信息的检索和数据的统计,充分发挥了信息管理系统中数据查询的优势,而且将以上任意条件检索功能与后继的相关报表程序相结合便形成了功能强大的输出的自定义化,多条件组合查询功能的实现,极大的方便了用户对信息管理系统的需求,也提高了信息管理系统的可操作性。

摘要:随着微软公司的新一代企业级开发平台Visual Studio.NET的推广及应用,越来越多的基于.NET的信息管理系统投入使用,为用户提供一个具有良好查询功能的信息管理系统是当前信息系统的基本要求之一。该文在研究各类信息管理系统中查询模块的特点基础上,给出了在.NET环境下实现了多条件组合查询的实例,并探讨了相关技术。

关键词:模糊查询,组合查询,条件,信息系统

参考文献

[1]朱晓钟,刘宪成.组合条件查询的设计与实现[J].数据库及信息管理,2007,15(1):674-676.

[2]武波,季托.基于ASP.NET的复合条件查询设计与实现[J].数据库与信息管理,2010,8(1):67-69.

[3]骆力明,陈小兵,王彦丽.数据库多条件组合查询优化算法研究[J].首都师范大学学报:自然科学版,2007,28(2):23-27.

[4]宋勤豹,沈均毅.管理信息系统通用查询工具的设计与实现[J].计算机工程与应用,2010,5(12):98-100.

[5]王盼卿,刘颖辉,陈家文,等.动态通用查询方法的设计与实现[J].军械工程学院学报,2007,13(2):44-47.

数据库查询优化策略研究 第7篇

查询效率往往和关系模式所处的范式等级密切相关, 在数据库设计阶段中, 不好的关系模式往往容易带来如下几个问题:数据冗余太大、插入异常、删除异常、更新异常。按照关系模式满足实际需求程度的不同, 可将关系模式分为不同等级, 即:1NF、2NF、3NF、BCNF、4NF、5NF, 这几个范式可以在不同程度解决上述问题。

一个较低范式的关系模式, 可以通过模式分解转换为若干个高一级范式的关系模式的集合, 此过程即是关系模式的规范化过程。规范化理论的基本思想是逐步消除不合适的数据依赖, 让其中关系的概念更确定和单一。具体来说, 从1NF到5NF是一个逐渐消除非主属性对码的部分函数依赖和传递函数依赖、消除主属性对码的部分函数依赖和传递函数依赖、消除非平凡且非函数依赖的多值依赖、消除连接依赖的过程。

需要注意的是, 规范化理论虽然为数据库设计提供了理论指导, 但并不是规范化程度越高, 模式就越好。例如:规范化程度越高, 虽然对降低数据冗余和消除数据异常有好处, 但由于关系被分解得更细, 当查询要用到两个以上关系模式的属性时, 就会因为连接运算而付出较高的代价, 反而会降低查询的效率。所以在设计过程中, 必须结合实际需要和应用环境, 为关系模式选用合理的范式等级。

2 索引的优化

索引是一种数据结构, 通过对数据表中一列或多列的值排序, 从而提升数据查询效率。但当对数据表进行增加、删除和修改数据的时候, 索引也需要发生相应变化即还需要动态维护索引, 因此使用索引会降低数据的更新速度。在数据库的设计过程中, 既要注意利用索引来提升查询效率, 同时也要考虑索引的维护代价, 因此, 应该遵从创建索引的一些原则。

(1) 索引要建立在经常需要查询的列上因为经常需要查询的列对索引利用率高。

(2) 在经常需要根据范围进行查询的列上要创建索引, 因为索引已经排序, 则根据范围进行查询时效率更高。

(3) 对查询中经常需要进行G R O U P BY、ORDER BY的列上建立索引, 这样可以加快查询的分组和排序的时间。

(4) 不应在数据值很少的列上创建索引。因为此种情况索引并不能显著提高查询速度。

(5) 不应在经常需要存取的列上创建索引, 因为在经常存取的列上建立索引会付出较大的维护代价。

3 查询语句的优化

从大多数数据库来看, 查询语句往往消耗了大部分的数据库资源, 如果对查询语句进行优化, 则可以大大提升数据库的性能。此外, 查询语句独立于程序设计逻辑, 相对于程序源代码的优化, 对查询语句优化的风险和时间成本会更低, 所以, 对查询语句进行优化具有重要的意义。以下是对查询语句进行优化的几条原则。

(1) 将最具有限制性的条件放在前面, 大值在前, 小值在后。

如“WHERE a<=10000 AND a>=1”效率高, 而“WHERE a>=1 AND a<=10000”效率低。原因就在于虽然这两个表达式表达的是同一个意思, 但因为“a<=10000”比“a>=1”具有更强的限制性, 所以具有更高的效率。

(2) 避免采用通配符匹配查询。

通配符匹配查询特别耗费时间。即使在条件字段上建立了索引, 在使用通配符匹配查询的情况下也还是采用顺序扫描的方式。解决办法是可以考虑将通配符表达式转化成等价的不等式, 则在执行查询时就会利用索引来查询, 这样就会大大的提高查询速度。

(3) 避免相关子查询。

一个列如果同时在主查询和WHERE子句中的查询中出现, 那么很可能当主查询中的字段值改变之后, 子查询必须重新查询一次。查询嵌套层次越多, 效率越低, 因此应当尽量避免子查询。解决办法是可以考虑将子查询改为用“AND”来表达的等价表达式, 这样就可以有效避免相关子查询, 提高查询效率。例如:将语句“SELECT s1, s2 FROM Ta WHERE s3 IN (SELECT s3 FROM Tb WHERE Tb.num=100) ”改为“:SELECT s1, s2 FROMTa, Tb WHERE Ta.s3=Tb.s3 ANDTb.num=100”。

(4) 消除对大型表行数据的顺序存取。

在嵌套查询中, 采用顺序存取策略将可能严重影响查询效率。比如采用顺序存取策略, 一个嵌套3层的查询, 如果每层都查询1000行, 那么这个查询就要查询10亿行数据。解决办法是对连接的字段进行索引, 此外还可以使用并集来避免顺序存取。

(5) 使用临时表加速查询。

合理使用临时表可以有效提升查询效率。以下两种情况可使用临时表提高查询效率。

(1) 当某一个SQL语句关联的表在两张及以上, 并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。

(2) 当程序执行过程中可能需要存放一些临时的数据, 这些数据在整个程序的会话过程中会用到。

在使用临时表的过程中需要注意的是:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下, 注意不要丢失数据。

(6) 字段的提取应采取“按需提取”的原则。

本原则要求查询语句应避免“SELECT*”, 而应根据实际需要提取字段。如果在结果中只需要显示字段“s1, s2, s6”, 则应写成“SELECT s1, s2, s6”, 这样可以省去不相关字段的查询时间。

4 结语

本文针对数据库查询优化所面临的若干重要问题进行了分析, 提出了一些数据库查询优化的基本原则。数据库设计者必须从实际需要出发, 综合考虑各方面的因素, 才能最大限度地提升数据库的整体性能。

参考文献

[1]王珊, 萨师煊.数据库系统概论 (第4版) [M].北京:高等教育出版社, 2006.

[2]樊新华.关系数据库的查询优化技术[J].计算机与数字工程, 2009, 37 (12) .

[3]郭忠南, 孟凡荣.关系数据库性能优化研究[J].计算机工程与设计, 2006, 27 (23) .

上一篇:加法论文下一篇:大学安全