DB2 优化器中针对JOIN 结果集估计经典版!

数据库
我们今天主要描述DB2 优化器中针对 JOIN 语句的实际操作结果集估计,愿在你学习DB2 优化器中针对 JOIN 语句的实际操作结果集估计中以起到抛砖引玉的作用。

以下的文章主要描述的是DB2 优化器中针对 JOIN 语句的实际操作结果集估计,在实际操作中DB2 优化器在为 SQL 语句生成执行计划时,其实际操作过程中都会对每个步骤产生的结果集大小进行估计,这就是优化器的基估计。

在所有 SQL 语句基估计过程中,以 JOIN 语句的计算过程最复杂,而 JOIN 语句恰恰是进行性能优化的重点。本文主要关注 DB2 优化器在进行基估计时采用的计算方法、输入等。

简介

优化器是 DB2 的心脏和灵魂(可以把它类比成宝马 730 或波音 747 的发动机引擎一样)。它分析 SQL 语句并确定可以满足每条语句的最有效的存取路径。 DB2 SQL 优化器可以估计每个备选访问计划的执行成本,并根据其估计结果选择一个最佳访问计划。

在优化器在优化一个 SQL 语句的过程中使用到两个非常重要的概念:selectivity 和 cardinality 。 selectivity 是指一个 SQL 操作的得出结果集占原来结果集的百分比,而 cardinality 就是指一个 SQL 操作的得出结果集的行数。

为正确地确定每种访问计划的成本,DB2 优化器都会对每个步骤产生的结果集大小即返回的行数进行估计,这就是优化器的基估计。 DB2 优化器需要准确的基数估计值。基数估计是这样一种过程:在应用了谓词或执行了聚集之后,优化器使用统计信息确定部分查询结果的大小。对于访问计划的每个操作符,优化器将估计该操作符的基数输出。一个或更多谓词的应用可以减少输出流基数。

JOIN 谓词

当我们在 SQL 里面需要对多个表进行 join 的时候,DB2 会首先选择其中的 2 个表进行 join,并获取到一个中间的结果集,然后 DB2 可能会用这个中间的结果集和第三个表做 join,再次获得中间的结果集(当然也可能是把另外 2 个表做 join,然后把两个中间的结果集进行 join 操作),不管是怎么操作,DB2 一次能够 join 的表的个数肯定是两个。因此当优化器在考虑 Join 如何处理的时候,join 的顺序就是一个很重要的问题,因为我们总是希望能够在最开始就把结果集控制的尽量小。

DB2 优化器中针对 JOIN 语句的结果集估计

以上的相关内容就是对DB2 优化器中针对 JOIN 语句的结果集估计的介绍,望你能有所收获。

【编辑推荐】

  1. DB2 数据类型如何才能轻松接触?
  2. DB2v9.5控制中心建库报错如何挽救?
  3. IBM DB2数据库错误信息的大集合,不得不看!
  4. 降低DB2管理表空间的高水位标记实操
  5. 3个建议实现DB2数据库设计,很简单!
责任编辑:佚名 来源: it168.com
相关推荐

2010-09-06 16:16:20

DB2 优化器

2010-08-20 12:49:49

DB2 pureXML

2010-07-30 14:14:11

DB2快照函数

2010-09-06 16:36:20

DB2快照函数

2010-08-19 11:33:43

DB2常用函数

2010-08-12 09:33:30

DB2数据库备份

2010-08-17 17:15:16

DB2终极

2010-08-31 15:08:14

DB2INSERT优化

2010-08-03 13:23:47

DB2自动增长主键

2010-08-19 14:54:07

DB2 优化器

2010-08-09 16:51:24

DB2数据库

2011-03-21 09:51:04

DB2性能优化

2010-08-13 10:43:49

IBM DB2数据库

2010-08-02 10:52:31

DB2取得当前时间

2010-11-04 15:39:40

DB2 SQL语句

2010-08-16 14:39:09

DB2数据库解死锁

2010-08-17 16:13:32

DB2 并行版本

2010-08-17 17:29:06

DB2性能优化

2010-11-04 15:34:20

DB2索引优化

2011-05-27 16:00:10

DB2
点赞
收藏

51CTO技术栈公众号