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

 
   | |

导读:SQL编码准则:第一条规则是始终在每条SQL SELECT语句的SELECT列表中只提供确实需要检索的那些列;DB2表在将来可能需要更改,以包括附加列。DB2将为被请求返回……

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

正在加载数据...

  这种特定查询的重要性 :查询越重要,那么您可能就越应该通过创建索引来进行调优。如果您正在编码 CIO 要每天都运行的查询,那么您应该确保它提供最佳性能。因此,为该特定查询构建索引是很重要的。反之,职员的查询也许就没有必要看得那么重,所以也许应该利用现有索引来执行查询。当然,决定取决于应用程序对业务的重要性 - 而不只是用户的重要性。

  索引设计涉及的内容比到目前为止我所讨论的要多得多。例如,您也许要考虑索引重载以实现仅索引访问(index-only access)。如果 SQL 查询要寻找的所有数据都包含在索引中,那么 DB2 也许只使用索引就可以满足该请求。请考虑我们前面的 SQL 语句。给定了关于 EMPNO 和 DEPTNO 的信息,我们要寻找 LASTNAME 和 SALARY。我们还从创建关于 EMPNO 和 DEPTNO 列的索引开始。如果我们在索引中还包含了 LASTNAME 和 SALARY,我们就不再需要访问 EMP 表,因为我们需要的所有数据都已经在索引中。该技术可以大大提高性能,因为它减少了 I/O 请求的数量。

  请记住:使每个查询成为仅索引访问是不谨慎,甚至也是不可能的。您应该谨慎使用该技术以便用于特别棘手或重要的 SQL 语句。

  SQL编码准则

  当您编写访问 DB2 数据的 SQL 语句时,要确保遵循以下三个编码 SQL 的准则以获得最佳性能。当然,SQL 性能是一个复杂的话题,而且了解 SQL 的执行方式的每一个细微差别可能要花一生的时间。但是,这些简单的规则可以使您进入开发高性能 DB2 应用程序的正轨。

  第一条规则是始终在每条SQL SELECT语句的SELECT列表中只提供确实需要检索的那些列 。另一种说法就是“不要使用 SELECT *”。简写 SELECT * 表示您要检索正在被访问的表中的所有列。这适用于“快捷但不恰当的方式获得的“(quick and dirty)查询,但却是应用程序的坏实践,因为:

  DB2表在将来可能需要更改,以包括附加列。SELECT * 也会检索那些新的列,而如果没有进行费时的更改,您的程序也许无法处理附加的数据。

  DB2将为被请求返回的每一列消耗附加资源。如果程序不需要数据,它就不会寻找它。即使程序需要每一列,最好根据 SQL 语句中的名称来显式地寻找每一列,以便增加清晰度和避免以前犯的错误。

  不要寻找您已经知道的东西 。这听起来似乎显而易见,但大多数程序员都曾经违反过这条规则。举一个典型的示例,考虑以下 SQL 语句有什么错误:

  SELECT EMPNO, LASTNAME, SALARY 

  FROM EMP 

  WHERE EMPNO = ’000010’; 


  放弃吗?问题是 EMPNO 已经包含在 SELECT 列表中。您已经知道了 EMPNO 将等于值“000010”,因为那就是 WHERE 子句要 DB2 做的事。但在 WHERE 子句中列出了 EMPNO,DB2 还会尽职地检索该列。这会产生附加开销,从而降低性能。

  在 SQL 中 使用 WHERE 子句过滤数据 ,而不是在程序中到处使用它进行过滤。这也是新手容易犯的错误。在 DB2 将数据返回到程序之前,最好由 DB2 过滤数据。这是因为 DB2 使用附加 I/O 和 CPU 资源来获取每一行数据。传递到程序的行越少,SQL 的效率就越高:


  SELECT EMPNO, LASTNAME, SALARY 

  FROM EMP 

  WHERE SALARY > 50000.00; 


  与只读取所有数据而不使用 WHERE 子句,然后在程序中检查 SALARY 是否大于 50000.00 的做法相比,该 SQL 更好。

  使用参数化查询 。参数化 SQL 语句包含了变量,也称作参数(或参数标记)。典型的参数化查询使用这些参数来代替文字值,因此 WHERE 子句条件可以在运行时更改。通常程序被设计成最终用户可以在运行查询之前提供参数的值。这允许使用一个查询根据提供给参数的不同的值返回不同的结果。


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

原文出处:http://tech.ccidnet.com/art/982/20080917/1573057_3.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中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录