WEB开发网
开发学院数据库DB2 通过DB2 TPC-C基准实现探索SQL 阅读

通过DB2 TPC-C基准实现探索SQL

 2009-12-23 15:00:09 来源:WEB开发网   
核心提示:这个函数实现上述步骤中的步骤 2,该函数为一个订购项(order line)检索产品信息,通过DB2 TPC-C基准实现探索SQL(7),并执行必要的库存更新,注意,它为函数提供产品列表,FILTER(5) 抛弃 I_PRICE IS NULL 的不合适的产品,这个函数被定义为 MODIFIES SQL DATA,这个

这个函数实现上述步骤中的步骤 2。该函数为一个订购项(order line)检索产品信息,并执行必要的库存更新。注意,这个函数被定义为 MODIFIES SQL DATA。这个子句允许 SQL 表函数包含 UPDATE、DELETE、INSERT 和 MERGE 语句。还应注意,这里使用了 INCLUDE 子句,这一次是为了放弃 OL_DIST_INFO 列。这个列来自所存储产品的特定地区信息。最后,注意在 RETURN 语句中使用了单行的 VALUES 子句,以便将最后的结果以单行的表的形式返回。

为了从这个复杂的 SQL 语句中赚取性能,DB2 选择一个非常精妙的查询计划:

清单 6. 第二条 SQL 语句的访问计划

Rows
RETURN
(  1)
CosT
I/O
|
14.4
TBSCAN
(  2)
26.2997
2.02765
|
14.4
SORT
(  3)
26.2978
2.02765
|
14.4
INSERT
(  4)
26.2922
2.02765
/---+---
14.4     44
FILTER  TABLE: SRIELAU
(  5)   ORDER_LINE
13.4359
1.02765
|
15
NLJOIN
(  6)
13.4334
1.02765
/----------+---------
15             1
TBSCAN          NLJOIN
(  7)          (  8)
0.000201927         13.2461
0           1.02765
|        /----------+----------
15      1             1
TABFNC: SYSIBM  NLJOIN           TBSCAN
GENROW    (  9)           ( 18)
13.246         4.48727e-005
1.02765            0
/----------+---------        |
1             1       1
TBSCAN          UNION  TABFNC: SYSIBM 
( 10)          ( 11)    GENROW
4.48727e-005         13.2457
0           1.02765
|        /----------+----------
1     0.96             1
TABFNC: SYSIBM  FETCH           UPDATE
GENROW    ( 13)           ( 15)
12.8727          0.371624
1           0.027648
/----+---         /---+---
1      36     0.013824     9
IXSCAN  TABLE: SRIELAU  FETCH  TABLE: SRIELAU
( 14)     ITEM     ( 16)    STOCK
0.0182935          0.193765
0            0.013824
|            /----+---
36        0.013824     9
INDEX: SYSIBM      IXSCAN  TABLE: SRIELAU
SQL0410231029418     ( 17)     STOCK
0.0157303
0
|
9
INDEX: SYSIBM 
SQL0410231029421

这是一个好计划 —— 但是它与前面的查询有什么关系呢?下面对该计划中的各项作一番介绍:

FETCH(13) 表示函数中的第一条 SET 语句,它从 ITEM 表中进行选择。

UPDATE(15) 显然是 STOCK 表的 UPDATE,包括将其派生出来的 SET 语句。

UNION(11) 不如它所声明的那么完整。在 内联 SQL PL 的上下文中,UNION 用于以一种连续的方式派生出语句。因此,这个 UNION 就相当于函数体 BEGIN ATOMIC...END。

TBSCAN(10) 初始化函数中的本地变量。这是 DECLARE 语句链。 FETCH(13) 和 UPDATE(15) 实际上是读取 NLJOIN(9) 的外表的值,并赋上新值,覆盖本地变量的默认值。

TBSCAN(18) 表示这个 SQL 表函数中的 RETURN 语句。

我们看一下 NLJOIN(8),它表示整个函数,从中可以看到一个按三种方法排序的连接:

初始化本地变量。

执行函数体。

返回结果表。

TBSCAN(7) 是该连接的外表,它为函数提供产品列表。

FILTER(5) 抛弃 I_PRICE IS NULL 的不合适的产品。

INSERT(4) 显然是到 ORDER_LINE 的 INSERT。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:通过 DB TPC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接