饶辉科
摘要:数据查询是数据库技术中非常重要的组成部分,查询效率的优劣直接影响数据库的性能。如何高效地进行数据查询,一直是数据库理论研究的重要方向。该文从查询优化的必要性,查询优化的方法等方面进行了讨论。
关键词:查询优化;代数优化;查询树
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)26-0008-02
1 引言
关系数据库是当今应用最广泛的数据库系统。关系数据库支持关系数据模型。关系数据结构非常单一,现实世界中的实体及实体之间的联系都是用关系来表示,在用户看来,关系数据结构就是二维表。常用的关系操作包括查询操作和插入、删除、修改操作两大部分,其中查询操作的表达能力最重要。数据查询是数据库应用中非常重要的组成部分,数据查询是否具备较高的执行效率和反应速度受到数据库设计者和用户的极大关注。
2 不同查询方案代价对比
关系模型中的查询语言早期通常是用代数方法或逻辑方法来表示,分别称为关系代数和关系演算,随后出现一种介于关系代数和关系演算的语言称为结构化查询语言,简称SQL。SQL语言作为关系数据库的标准语言向用户提供了易于掌握、高度非过程化得查询语言。大多数商用数据库都支持SQL语言,用户只需指明“干什么?”不需指出“怎么干。”对同一个查询要求有不同的查询解决方案,查询优化就是尽量在不同的解决方案中找到效率高、代价小的方案。
为了提升数据库系统性能对数据查询进行优化成了必须解决的问题,查询优化技术的发展与应用,也助推了数据库技术的推广与普及。
下面我们通过一个实例对比不同查询方案所花费的代价。
商品销售管理数据库
销售点信息表(销售点编号,城市、地址,联系电话,开设时间)
产品信息表(产品编号,产品名,类型,规格,生产厂家,进货价格)
销售情况表(销售点编号,产品编号,销售量,销售单价)
求销售产品编号为JD051这种产品的销售点信息?
用SQL语言表达该查询:
Select 销售点信息表.*
From 销售点信息表 , 销售情况表
Where 销售点信息表.销售点编号=销售情况表.销售点编号 and 产品编号=JD051
SQL语言是高度的非过程化语言,同一个查询要求可以有不同的执行方式。下面针对上述查询要求运用关系代数表达式来表示不同的执行方式。
方案1
Π销售点信息表.*(σ销售点信息表.销售点编号=销售情况表.销售点编号∧销售情况表.产品编号=JD051(销售点信息表×销售情况表))
第一种方式需要占用内存空间保留广义笛卡尔积的中间结果,读取数据量过多及耗时较长;
方案2
Π销售点信息表.*(σ产品编号=JD051(销售点信息表∞销售情况表))
第二种方案相比第一种方式减少了中间结果,使用自然连接相比笛卡尔积大大减少了中间结果;
方案3
Π销售点编号(σ产品编号=JD051 (销售情况表))∞销售点信息表
第三种方式减少了数据读取量,中间结果相比第二种情况更少。总的查询时间最短、查询代价最少。
以上三种表达式虽然等价,但其执行的查询策略不同,数据规模越大,查询所花费的代价差别就越大。通过三种不同查询方式的对比,说明查询优化的必要性,选择合适的查询策略将大大减少查询时间、降低查询代价,因此查询优化问题一直是数据库研究的重点。
3 关系数据库查询处理过程
当用户发出查询请求,要采用不同的处理步骤对原始查询进行转换,这些转换工作必须在系统处理查询请求和返回查询结果前完成。关系数据库查询处理过程如图1所示。
图1
主要步骤:语法分析与翻译处理,查询优化处理,执行。
4 查询优化技术分类
查询优化技术一般分为代数优化和非代数优化(物理结构优化)。
1)代数优化,通过对查询语句进行变换,改变基本操作的次序,使查询语句执行起来更有效,这种查询优化仅涉及查询语句本身,而不涉及实际存取路径,称为独立于存取路径的优化,或代数优化。
查询是由高级查询语言表示的对数据库的一个或一组操作的集合,通常由投影、选择、连接、笛卡尔积等操作符组成。通过语法分析功能分析查询语句的正确性、完整性、有效性,并将其转换为等价关系代数查询树,如图2。
根据关系代数等价变换规则,查询树可以按以下方法进行变换:
方法1:下移选择和投影运算,以减少中间结果的元组数和参与运算的关系的规模;
方法2:将某些选择运算与笛卡尔积运算相结合;
方法3:同时执行同一个关系上的选择、投影运算,减少对关系的扫描次数;
方法4:将连接运算与投影运算结合起来执行。
图2可变换为图3。
对比图2和图3选择运算和投影运算优先执行,减少了查询中间结果的元组数,大大降低了参与连接运算的关系规模。
在制定具体的查询策略时应尽量减少对数据表的访问,减少对磁盘的访问次数,访问磁盘所需的时间大大长于对内存的访问时间,减少对磁盘的访问次数将大大降低系统的响应时间。选择运算尽可能提前做,往往可以使执行时间降低几个数量级,通过选择运算减少中间结果。在执行连接操作前,对关系进行适当的预处理,在连接的字段上建立索引以及对关系进行排序,加快查询速度。
关系代数优化的一般步骤:[3]
(a)把查询转换成语法树;(b)优化语法树;(c)选择低层次的存取路径;(d)选择代价较小的查询方案。
2)非代数优化,也称物理结构优化。数据库物理结构是整个数据库存储的基础,物理结构设计是在逻辑结构设计的基础上完成的,应确保数据库存储和访问或操作数据表具有较高的执行效率。物理结构优化是指为数据库系统的数据推荐合适的物理存储位置或存储结构,以及为查询推荐合适的存取路径,进而提升系统的整体性能。
5 小结
查询优化技术是数据库中一项重要的技术。对于的查询要求,我们应该根据数据规模大小,具体的物理存储结构等因素进行分析,选择合适的查询策略。具体的SQL查询语句应根据代数优化的相关原则进行变换,提高查询效率。查询优化目的是为了提升系统的性能,如果进行优化本身需要花费的代价过大,反而会降低系统的性能。所以只有兼顾了查询效率、控制系统开销、保障数据库安全等诸多方面才能真正地优化系统的性能。
参考文献:
[1] 冯卫兵.关系数据库的查询优化[J].现代计算机,2010(1).
[2] 王能斌.数据库系统原理[M].北京:电子工业出版社,2001.
[3] 萨师煊,王珊. 数据库系统概论[M].3版.北京:高等教育出版社,2000.
[4] 谷震离.关系数据库查询方法研究[J].微计算机信息,2006.
[5] 崔跃生,张勇,曾春,等.数据库物理结构优化技术[J].软件学报,2013,24(4).
[6] 梁志宏,勒延安,周华.等价关系代数查询优化方法的研究[J].山西师范大学学报:自然科学版,2004.
[7] 王峥,王亚平.关系代数与SQL查询优化的研究[J].电子设计工程,2009(8).