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

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

 2009-12-23 15:00:09 来源:WEB开发网   
核心提示:NEW ORDER 事务(本地)NEW ORDER 事务处理来自一个客户的新订单,这里需要做各种不同的事情:获取下一个订单 id 和客户所在地区的地区税率,通过DB2 TPC-C基准实现探索SQL(3),增加客户所在地区的下一个订单 id,以便用于随后的事务,这两个表的表名是 DELETED 和 INSERTED,DB

NEW ORDER 事务(本地)

NEW ORDER 事务处理来自一个客户的新订单。这里需要做各种不同的事情:

获取下一个订单 id 和客户所在地区的地区税率。

增加客户所在地区的下一个订单 id,以便用于随后的事务。

对于客户订购的每种产品:

从 ITEM 表检索产品的名称、价格和描述。

从 STOCK 表检索该产品的地区信息和剩下的库存水平。

将该产品的库存水平减去订购的数量。如果库存低于阈值,则应该订购货物(通过简单地增加库存值来实现)。

将获得的相关数据,包括总价格,插入到 ORDER_LINE 中。

将订单插入 ORDERS 和 NEW_ORDER 表。

从 CUSTOMER 检索客户名、折扣、信用信息。

从 WAREHOUSE 检索销售税。

考虑折扣和税,计算总价格。

这是很大的工作量。不过,DB2 使用 SQL 语句来处理所有这些工作。其原理如下:

首先,DB2 处理 DISTRICT 表。这里需要返回数据,并执行更新。经验告诉我们,这需要 2 条 SQL 语句,并且 UPDATE 应该在 SELECT 语句之前执行;否则,当并发增多时,可能会发生死锁。

但是,DB2 支持一种新的 SQL 特性,这种特性正处在标准化的过程中。该特性允许访问触发器中所谓的 过渡表(transition table)。 OLD TABLE 过渡表保存了受影响的行在被 UPDATE 或 DELETE 语句处理之前的初始状态。 NEW TABLE 过渡表保存处理了 INSERT 或 UPDATE 语句之后受影响的行。这是 AFTER 触发器被激发之前的状态。懂得 Microsoft 或 Sybase 的用户可能知道这两个表,在 Microsoft 或 Sybase 中,这两个表的表名是 DELETED 和 INSERTED。

DB2 所做的就是允许 UPDATE、DELETE 和 INSERT 出现在选择语句的 FROM 子句中,并允许用户选择应该从哪个过渡表进行选择:

清单 2. 使用过渡表

1
SELECT D_TAX, D_NEXT_O_ID
2
INTO :dist_tax , :next_o_iD
3
FROM OLD TABLE (
UPDATE DISTRICT
4
SET D_NEXT_O_ID = D_NEXT_O_ID + 1
5
WHERE D_W_ID = :w_iD
6
AND D_ID = :d_iD
7           )
AS OT

通过查看 清单 3 中所示的优化器计划,可以很容易看出这种逻辑的优点:

清单 3. 使用过渡表的访问计划

Rows
RETURN
(  1)
CosT
I/O
|
1
UPDATE
(  2)
25.7261
2
/---+--
1     26
FETCH  TABLE: SRIELAU
(  3)   DISTRICT
12.872
1
/----+---
1      26
IXSCAN  TABLE: SRIELAU
(  4)    DISTRICT
0.0175755
0
|
26
INDEX: SYSIBM 
SQL0410231029415

上一页  1 2 3 4 5 6 7 8  下一页

Tags:通过 DB TPC

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