WEB开发网
开发学院数据库DB2 DB2中多种常用功能的解决方法 阅读

DB2中多种常用功能的解决方法

 2007-05-20 16:18:39 来源:WEB开发网   
核心提示: create table t2 (col1 varchar(10))alter table t2 alter column col1 set data type varchar(12)我很喜欢这个视图,所以我实现它如果派生列对您来说还不够坏,DB2中多种常用功能的解决方法(7),整个派生表
create table t2 (col1 varchar(10))
alter table t2 alter column col1 set data type varchar(12)

我很喜欢这个视图,所以我实现它

如果派生列对您来说还不够坏,整个派生表怎么样?使它与基表中的数据匹配或不匹配(以及使每个 SELECT 成为潜在的错读)的能力又如何?Oracle 称这些为实现的视图。DB2 称它们为自动汇总表,在特殊情况下称为复制汇总表。如果经常被问到一个问题(SELECT MAX(ORDERS) FROM LEADS),或者经常组装一个聚集(SELECT COUNT(FRANCHISES) FROM STORES WHERE STATE=’TEXAS’),那么或许值得将结果集存储在磁盘上,这样 DB2 就不必每天重新计算它二十次:特别当几天前的数据足以准确地支持基于查询的决策时。

让我们从想知道哪个客户订购最多的贪婪的销售经理开始。他们在名为 LEADS 的表中跟踪这一项,推断出客户过去所下订单的数目可能有助于确定哪些销售线索最有可能变为真实的销售。这个问题每天会被问几次(如果您预感这正在发生并且需要验证它,您可以使用名为 Query Patroller 的 DB2 工具查看来自用户的查询)。SELECT MAX() 通常需要一个表扫描,这会强制 DB2 查看表中的每一行。如果您有许多线索,则需要扫描许多行才能找到一个值。定义一个汇总表允许 DB2 将这个值存储在磁盘上,这样 DB2 只用读一行就可以得到答案:

create summary table leads_max
(MAX_ORDERS) as (SELECT MAX(ORDERS) FROM LEADS )
DATA INITIALLY DEFERRED
REFRESH DEFERRED

创建汇总表后,用这条命令填充它:

REFRESH TABLE LEADS_MAX

用户不必了解汇总表。DB2 优化器会决定何时使用基本表,何时使用汇总表。请注意 REFRESH DEFERRED 子句:您正在告诉 DB2 旧数据在汇总表中是可接受的。这在您不需要准确答案或当前答案时是合适的。它适合构建一个业务计划,但对于要怎样存储银行余额,它就不适合了。请参阅 SQL Reference 中的特殊寄存器 CURRENT REFRESH AGE 以及 Administration Guide 中的“Creating a Summary Table”一节,以了解在答案可以“足够接近”、无需精确时,如何为汇总表中的旧数据设置容忍度。

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

Tags:DB 多种 常用

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