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

 
   | |

导读:本文将向您演示DB2优化器的工作方式,并提供编写能发挥优化器最大效率的SQL的准则。

关键词:IBM DB2 DB2 UDB SQL编码优化 基础教程

正在加载数据...

当要保证用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优化


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

原文出处:http://tech.ccidnet.com/art/982/20080917/1573057_1.html
 
来源:赛迪网    作者:yan    
 
 
 
 
 

DB2性能与调优

 
在许多XML应用场合,XML数据的结构与使用率都决定了拆分工作的困难。这也就是为什么DB2支持XML列,使得用户无需转换就可以对XML数据进行索引与查询。
 
DB2 9 for z/OS 同DB2 9.x for Linux, UNIX, and Windows支持两种拆分方法,XML TABLE函数与XML Schema注释。
 
在9月23日IBM DB2诞生25周年纪念大会上,IBM正式宣布启动寻找XML超级明星的全球比赛,旨在测试参赛者对XML相关知识和技能以及数据库技术的掌握情况。

热门技术手册排行

 

在本次的技术手册中,我们为您提供了PL/SQL的基础知识以及专家指导,包括了PL/SQL中的数据类型简介、PL/SQL函数与触发器以及PL/SQL中的存储过程等,相信您无论是高手还是菜鸟都可以获得有帮助的信息。

 

本系列文章由三部分组成,为Oracle数据库管理员(DBA)面试成功的必备手册。本专题内容囊括从DBA最初的面试开始,从写“杀手简历”到求职信、到面试过程到Oracle认证再到上升到公司高层最后到你成为公司里的明星DBA。专家为你一一指点迷津,最终让你登上成功的宝座。

 

要成为一名DBA,你需要具备哪些素质?DBA的薪酬待遇如何?DBA的职业道路究竟可以走向何方?我们将在本次的技术手册中为您一一解答。

 

在本次技术手册中,我们将对SQL Server存储过程的调试进行详细的介绍,包括了基础的调试方法和在调试过程中出现的T-SQL性能问题和解决方法。

 

本技术专题主要围绕sql server设计这个话题展开,侧重介绍了sql server集簇索引的设计、如何创建sql server索引、如何优化索引、索引的能与不能、处理sql server 2000索引碎片技巧以及维护sql server索引以实现查询优化等等。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录