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

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

 2007-05-20 16:18:39 来源:WEB开发网   
核心提示: REFRESH DEFERRED 是总结只读表上数据的理想选择,多分区数据库的特殊汇总表称为复制汇总表,DB2中多种常用功能的解决方法(8),您将在 DB2 EEE 中使用它以在每个分区都有小型表(或只读表)的副本,在 EEE 中,而另一种方法对于继承您的设计以进行维护和添加新功能的开发人

REFRESH DEFERRED 是总结只读表上数据的理想选择。多分区数据库的特殊汇总表称为复制汇总表。您将在 DB2 EEE 中使用它以在每个分区都有小型表(或只读表)的副本。在 EEE 中,您通常将最大的表(称为事实表)分布到所有的分区。大量使用的连接键(如客户号码)应该作为分区键使用。DB2 将数据进行散列处理以对它分区。这意味着较少使用的连接键(如国家/地区或部门)可能会以次优化方式分布。当您在多分区数据库中连接数据时,与组合的连接更快(例如,CUSTOMER 和 COUNTRY 表中所有 COUNTRY 为 Argentina 的行都在同一分区)。如果 COUNTRY 不是分区键,这是不可能的。要获得组合,您可以将较小的表限制在一个分区,然后创建一个将它复制到其它分区的复制汇总表。这一策略在所复制的表较小或很少有更改时奏效(如果您在经常更改国名的国家做生意的话,要避免这么做)。如果表确实很小(如各大洲的列表),不要费心去复制它:DB2 将把它传送到所有分区并在连接期间将它保留在内存中。不要担心通过名称连接到副本:判断副本表何时可以提高性能是 DB2 的工作。

通过使汇总表 REFRESH IMMEDIATE,可以将它们用于动态数据。这有比 REFRESH DEFERRED 更严格的规则,所以请仔细阅读 SQL Reference。在首次创建汇总表之后,您仍必须使用 REFRESH TABLE 语句:

CREATE SUMMARY TABLE LEADS_BY_STATE
(NUM_LEADS, GRP_STATE)
AS (SELECT COUNT(ORDERS), STATE FROM LEADS GROUP BY STATE)
DATA INITIALLY DEFERRED
REFRESH IMMEDIATE
REFRESH TABLE LEADS_BY_STATE

也可以这样

我们现在已研究了两种视图。作为标准视图,视图定义存储在数据库中(在 SYSCAT.VIEWS.TEXT 中)而数据只存储在基表中。我们可以通过创建汇总表使得在这个数据上执行 SELECT 操作更快,这是以冗余数据为代价,它消耗更多磁盘空间并使得 INSERT、UPDATE 和 DELETE 更慢(或让基表和汇总表不同步,至少在下一次刷新以前是这样)。还有另一个极端:创建一个仅在数据库连接期间存在的聚集,或者甚至和 SQL 语句的生命期一样短。第一个称为 DECLARED TEMPORARY TABLE,第二个称为 COMMON TABLE EXPRESSION,也称为 TEMPORARY RESULT TABLE。一个声明的临时表需要一个 USER TEMPORARY TABLESPACE,您可以用 CREATE TABLESPACE 命令创建它(请参阅 SQL Reference)。您可以将这个临时表声明为应用程序运行时数据的保留位置。

DECLARE GLOBAL TEMPORARY TABLE table1
(column1 INT, column2 INT)
NOT LOGGED

您用模式 SESSION 限定表,因为它属于您连接到数据库时创建的会话:

INSERT INTO SESSION.TABLE1 VALUES (4,5)
SELECT * FROM SESSION.TABLE1

您可能希望这个临时表与现有表匹配,因此您可以用现有表的 SELECT 语句填充它。如果这样的话,使用 LIKE 创建它:

DECLARE GLOBAL TEMPORARY TABLE TEMP_EMP
LIKE EMPLOYEE
NOT LOGGED
INSERT INTO SESSION.TEMP_EMP
SELECT * FROM EMPLOYEE

当您断开连接时,DB2 将删除这个临时表。对于某些更临时的东西,DB2 支持公共表表达式,它允许您定义只存在于一条语句的表。公共表表达式还是另一个细微问题的答案:给一个不是以动词开始的 SQL 语句命名:

WITH COMPENSATION AS
(SELECT SUM(SALARY+COMMISSION)
AS TOTAL FROM EMPLOYEE)
SELECT TOTAL FROM COMPENSATION

您现在已被护送出红灯区。公共表表达式并不违背关系原则:它不要求 DB2 存储派生数据,也不添加人工列。如果一定要从这个故事引出一个寓意的话,假定用计算机解决一个问题有 n 种方法。一种方法可能成本最低,一种方法对您而言最快,一种方法对用户而言最快,而另一种方法对于继承您的设计以进行维护和添加新功能的开发人员而言最快。至于哪种选择最好,就作为习题留给读者吧。

上一页  3 4 5 6 7 8 

Tags:DB 多种 常用

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