通过 DB2 TPC-C 基准实现探索 SQL
2008-09-17 16:31:49 来源:WEB开发网这是一个好计划 —— 但是它与前面的查询有什么关系呢?下面对该计划中的各项作一番介绍:
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。
SORT(3) 有点特殊。因为这个查询是一个游标,因此 DB2 正面临一个窘境。该查询通过更新 STOCK 和 ORDER_LINE,而更改数据库的状态。然而,我们无法保证用户将真正取表中的所有行,从而使这些更改通过。因此,DB2 需要 dam 结果集,以确保当游标被打开时整个查询已经完成。出于性能的原因,这里为常规临时表上的 dam 选择一个没有排序键的 SORT。这些 常用的(do-at-open) 语义实际上有一个非常好的副作用。通过使用 cursor with hold,可以执行复杂的数据库操作,并在打开后提交这些操作。然后就可以直接读取和分析结果集,而不必持有任何锁。
更多精彩
赞助商链接