IBM DB2数据库SQL编码优化基础教程介绍(一)

日期: 2008-11-17 作者:yan 来源:TechTarget中国 英文

当要保证用IBM DB2 Universal Database(DB2 UDB)和Borland工具(如 Delphi、C++Builder或Kylix)构建的企业应用程序拥有最优性能时,程序员可以利用 DB2 优化器的能力来处理即使是“难以处理的”SQL 语句并给出有效的存取路径。尽管如此,拙劣编码的 SQL 和应用程序代码仍可能给您带来性能问题,通过学习几条基本准则可以轻易地避免这些问题。我将向您演示 DB2 优化器的工作方式,并提供编写能发挥优化器最大效率的 SQL 的准则。但即使拥有了 DB2 的优化能力,编写有效的SQL语句仍可能是一件复杂的事情。如果程序员和开发人员还不熟悉关系数据库环境,这件事就尤其显得棘手。因此,在我们深入研究编码SQL以获得最佳性能的细节之前,先花一些时间来回顾 SQL 基础知识。

基础知识

由于SQL与过程化语言不同,它提供了更高的抽象级别,因此它可以让程序员把精力集中到他们需要什么样的数据,而不是 如何检索数据。您不必使用嵌入式数据导航指令来编码SQL。DB2会分析SQL,并“在幕后”制定数据导航指令。这些数据导航指令叫作 存取路径。让DBMS确定到数据的最优存取路径解除了程序员肩上沉重的负担。此外,数据库可以更好地理解它存储的数据的状态,从而可以生成到数据的更有效和动态的存取路径。其结果就是适当使用的 SQL 可以用于更快的应用程序开发。

另一个SQL特性是它不仅仅是一种查询语言。您还可以使用它来定义数据结构;控制对数据的访问;以及插入、修改和删除数据的发生。通过提供一种公共语言,SQL 简化了 DBA、系统程序员、应用程序员、系统分析员和最终用户之间的通信。当项目的所有参与者都使用同一种语言时,他们之间所建立起来的协作就可以减少整体系统开发时间。

历史证明,保证SQL成功的最重要的一个特性就是它使用类似英语的语法轻松地检索数据的能力。理解这种语言比理解数据页面的结构和程序源代码要容易得多:


SELECT LASTNAME 
FROM EMP 
WHERE EMPNO = ’000010’;

想想看:当访问文件中的数据时,程序员必须编码指令来打开文件、开始一个循环、读取记录、检查EMPNO字段是否等于适当的值、检查文件结尾、回到循环的开头等。

SQL本来就是非常灵活的。它使用自由格式的结构,该结构可以让用户开发 SQL 语句来适合他们的需要。DBMS在执行之前会分析每个SQL请求,以检查语法是否正确和优化该请求。SQL语句不需要从任何给定的列中开始,您可以将它们串在一行中,或者把它们拆成几行。例如,以下这条单行的 SQL 语句与我前面使用的三行示例等价:


SELECT LASTNAME FROM EMP WHERE EMPNO = ’000010’; 

SQL的另一个灵活特性是您可以用许多形式不同但功能等价的方法来制定一个请求。例如:SQL 可以连接表或嵌套查询。您始终可以将嵌套查询转换成等价的连接。您可以在大量的函数和谓词中看到这一灵活性的其它示例。具有等价功能的特性的示例包括:


BETWEEN vs <= / >= 

IN vs 一系列和 OR 配合的谓词

INNER JOIN vs FROM 子句中串在一起并用逗号分隔的表

OUTER JOIN vs 带有 UNION 的简单 SELECT 和相关的子查询

CASE 表达式 vs 复杂的 UNION ALL 语句

SQL展示的这一灵活性并不总是称心的,因为形式不同但功能等价的 SQL 公式可以提供非常不同的性能。我将在本文的以后部分讨论该灵活性所造成的结果,并提供开发有效的 SQL 的准则。

如我所说的,SQL指定了要检索或操作什么数据,但没有指定数据库如何完成这些任务。这就使 SQL 本身变得很简单。如果您能够记得关系数据库的一次处理一个集合(set-at-a-time)的特点,您就开始掌握SQL的本质和性质了。一条SQL语句可以作用于多行。作用于一组数据而不需要建立如何检索和操作数据的能力将 SQL 定义成非过程化语言

因为SQL是一种非过程化语言,所以一条语句可以代替一系列过程。同样,由于 SQL 使用集合级别的处理以及DB2优化查询来确定数据导航逻辑,所以这是可能的。有时,如果不使用 SQL 语句,一条或两条SQL语句可以完成的任务就需要完整的过程化程序来完成。

优化器

优化器是DB2的心脏和灵魂。它分析SQL语句并确定可以满足每条语句的最有效的存取路径(请参阅图 1)。DB2 UDB通过解析SQL语句来确定必须访问哪些表和列,从而完成该操作。DB2优化器然后查询存储在 DB2 系统目录中的系统信息和统计信息,以确定完成满足SQL请求所必需的任务的最佳方法。

运行中的DB2优化

图1. 运行中的DB2优化

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

yan
yan

相关推荐