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

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

 2008-09-17 16:31:49 来源:WEB开发网   
核心提示: 这是一条 重量级 SQL 语句,接下来我们逐步来分析这个查询: ITEMLIST 由输入参数组合而成,通过 DB2 TPC-C 基准实现探索 SQL(6),它包括产品以及每种产品的数量,这是在一个 VALUES 子句中收集到的,否则 UPDATE、DELETE 或 INSERT ( 数据更

这是一条 重量级 SQL 语句。接下来我们逐步来分析这个查询:

ITEMLIST 由输入参数组合而成。它包括产品以及每种产品的数量,这是在一个 VALUES 子句中收集到的。对于列表中的所有产品,订单 id、地区和仓库是不变的。

通过使用一个关联连接(correlated join), NEW_OL_LOCAL SQL 表函数逐个处理列表中的每种产品。很快您就可以看到,该函数返回产品的价格、某些元数据和库存信息。

对于不能找到的产品(价格为 NULL),可以将其过滤掉。将产生的表称作 DATA。

将 DATA 中的每种产品插入到 ORDER_LINE 中。

将每种产品的价格、名称、元数据和库存信息返回给用户。

这里有两件有趣的事情。

首先, NEW_OL _LOCAL 表函数实际上一次只返回一行。由于这一层关系,它操作起来更像是一个 用户定义的关系操作符。

另外,正如您后面将会看到的, NEW_OL _LOCAL 表函数实际上是写一个表。这里您看到的是一个连接,内表在其中执行数据库修改。为允许这一点,并使数据库保持一致的状态,DB2 需要确信连接的内表和外表没有冲突;或者,DB2 需要外加一个称作 dam 的临时表,以确保在这个表函数开始处理之前,连接的外表被完全导出。由于这个 SQL 表函数是以 内联 SQL PL 编写的,这是 DB2 用于 SQL PL 的宏语言,因此 DB2 可以看穿这个函数,并得出结论,认为该事务在行为上没有问题,这种情况下不需要 dam。

提到连接的内表和外表之间各种可能的冲突之后,还应该提到的是,在这个函数与 INSERT 操作之间也可能发生类似的问题。为了避免太多的复杂性,DB2 强加了一条简单的规则:除非嵌入在相关的函数里面,否则 UPDATE、DELETE 或 INSERT ( 数据更改操作)不应该出现在连接中。而且, 数据更改操作 也不应该出现在嵌套查询中。

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

Tags:通过 DB TPC

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