2008年6月23日 星期一

SQL Explain Tool on MDC Table using DB2 UDB8.2

/*建立Multi-Dimensional Cluster table*/

CREATE TABLE TABPLUS
(
  X INTEGER NOT NULL,
  Y INTEGER NOT NULL,
  XY INTEGER,
  DES VARCHAR(32)
) ORGANIZE BY DIMENSIONS (X, Y)
NOT LOGGED INITIALLY IN USERSPACE1;

/*新增測試資料*/

INSERT INTO TABPLUS
WITH N(X) AS (
SELECT 1 X
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT N.X + 1
FROM N
WHERE N.X + 1 <= 100
)
SELECT N.X , N1.X , N.X * N1.X,
RTRIM(CHAR(N.X)) || ' x ' ||
RTRIM(CHAR(N1.X)) || ' = ' ||
RTRIM(CHAR(N.X * N1.X))
FROM N,N N1;

/*REORGCHK TABPLUS*/

DB2 REORGCHK UPDATE STATISTICS ON TABLE ORION.TABPLUS


/*結果如下圖*/

/*REORGCHK TABPLUS*/




SELECT A.TABNAME,A.CARD * (SUM(B.AVGCOLLEN)+10)
FROM SYSCAT.TABLES A, SYSCAT.COLUMNS B
WHERE A.TABNAME = B.TABNAME
AND B.TABNAME ='TABPLUS'
GROUP BY A.TABNAME,A.CARD

/*執行結果*/

TABPLUS 410000


db2expln -database CDIDB2 -g -statement "select x,sum(xy) from tabplus where x=20 and y=40 group by x" -o c:\plus.log

/*結果如下:*/

DB2 Universal Database Version 8.1, 5622-044 (c) Copyright IBM Corp. 1991, 2002
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL Explain Tool
******************** DYNAMIC ***************************************
==================== STATEMENT ==========================================
Isolation Level      = Cursor Stability
Blocking          = Block Unambiguous Cursors
Query Optimization Class = 5

Partition Parallel    = No
Intra-Partition Parallel = No

SQL Path          = "SYSIBM", "SYSFUN", "SYSPROC", "ORION"

SQL Statement:

 select x, sum(xy)
 from tabplus
 where x=20 and y=40
 group by x

Section Code Page = 1208

Estimated Cost = 77.462067
Estimated Cardinality = 1.000000

Access Table Name = ORION.TABPLUS ID = 2,190
| Index Scan: Name = SYSIBM.SQL080624120914310 ID = 1
| | Composite Block Index
| | Index Columns:
| | | 1: X (Ascending)
| | | 2: Y (Ascending)
| #Columns = 1
| Clustered by Dimension for Block Index Access
| #Key Columns = 2
| | Start Key: Inclusive Value
| | | | 1: 20
| | | | 2: 40
| | Stop Key: Inclusive Value
| | | | 1: 20
| | | | 2: 40
| Data Prefetch: None
| Index Prefetch: None
| Lock Intents
| | Table: Intent Share
| | Block: Intent Share
| | Row : Next Key Share
| Sargable Predicate(s)
| | Predicate Aggregation
| | | Group By
| | | Column Function(s)
Aggregation Completion
| Group By
| Column Function(s)
Return Data to Application
| #Columns = 2
End of section

Optimizer Plan:
         RETURN
         (  1)
           |
         GRPBY
         (  2)
           |
         FETCH
         ( 3)
        /    \
     IXSCAN    Table:
     (  3)    ORION
       |     TABPLUS
     Index:
     SYSIBM
     SQL080624120914310

※ drop MDC TABLE TABPLUS 前,只剩下12.8G. DROP 後剩下14.0G
結論是我覺得MDC Table佔空間,performance也沒有好到哪裡去. 用MQT是上選.