首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 SELECT 進階三式:建結果表、物化查詢表、複製結構

     編輯:DB2 教學

前言

SELECT 不只是查詢,配合 CREATE TABLE 還能完成 DDL 級操作。本文介紹三種進階用法,分別解決「只要結構」、「要資料且可刷新」、「要結構加資料」三類需求。

用法 1:建立結果表

CREATE TABLE new_table_name AS
  (SELECT * FROM source_table)
  DEFINITION ONLY;
  • 僅複製欄位定義、資料型別、NULL 屬性
  • 不複製:資料、索引、主鍵、外鍵、檢查約束、Identity、Generated Column
  • 新表為一般基底表,可自由加索引、約束

用法 2:建立物化查詢表

CREATE TABLE new_table_name AS
  (SELECT * FROM source_table)
  DATA INITIALLY DEFERRED REFRESH DEFERRED;

REFRESH TABLE new_table_name;
  • 表類型顯示為 Q (Query),但可像一般表一樣查詢
  • DATA INITIALLY DEFERRED:建立時不載入資料
  • REFRESH DEFERRED:手動控制刷新時機(REFRESH TABLE)
  • 適合:彙總報表、跨表 Join 預計算、定時刷新的快照表
  • 查詢優化器可自動重導查詢至 MQT(需 CURRENT REFRESH AGE = ANY)

用法 3:複製表結構

CREATE TABLE new_table_name LIKE source_table;
  • 複製:欄位、型別、NULL、Identity、Generated Column、壓縮屬性
  • 不複製:資料、索引、主鍵、外鍵、檢查約束、權限、觸發器
  • 比 DEFINITION ONLY 更完整保留 Identity/Generated 定義

三式快速選擇表

需求指令有資料可刷新保留 Identity表類型
只要結構,後續自建索引/約束AS ... DEFINITION ONLY❌❌❌T (Table)
要資料、需定期同步、優化器可用AS ... DATA INITIALLY DEFERRED REFRESH DEFERRED✅ (手動刷新)✅✅Q (MQT)
要結構+Identity/Generated,不需資料LIKE❌❌✅T (Table)
DB2 SELECT 進階三式示意圖

實務提醒

  • MQT 刷新會鎖表,大表建議離峰執行或使用 REFRESH TABLE ... ALLOW WRITE ACCESS(V10.5+)。
  • LIKE 不複製權限,部署後記得 GRANT。
  • 三種指令皆不複製統計資料,新表建立後執行 RUNSTATS。

小結

「DEFINITION ONLY 快建骨架、LIKE 完整複製定義、MQT 預計算加速查詢」——三招組合,涵蓋開發、測試、生產環境的多數建表需求,讓 DBA 遠離繁瑣的手工 DDL。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved