DB2大數據量優化查詢解決方案


利用DB2表分區的功能對大數據量的表進行分區,可以優化查詢。

表分區介紹:

表分區是一種數據組織方案,它根據一列或多列中的值把表數據划分為多個稱為數據分區 的存儲對象。

(我覺得表分區就類似於Windows系統的磁盤分區,通常我們將磁盤分區成:系統盤,娛樂盤,學習盤,工作盤。如果我想找一個《Thinking in java》的電子書,我們會直接去學習盤去搜索,相反,如果我們電腦只分一個區,那么我們必須要搜索整塊硬盤。)

When需要進行表分區

在數據倉庫中,事實表或歷史表的大小是擺在設計人員和管理員面前的一個挑戰。這些表通常包含數億行數據,有時候甚至包含數千億行數據。對於這種規模的表,主要關心以下幾點:

  • 查詢性能
  • 將大量新數據插入到這些表中
  • 每月或每個季度刪除大量過時的數據

(我覺得分區表主要用在記錄型表中,表中數據按時間日期進行累計,記錄的可利用性隨時間的流逝逐漸變小,歷史數據不會被使用或者被利用的可能性很小)

How建立表分區:

create table person1(

   id varchar(32) NOT NULL,

   p_name varchar(32),

   p_age INTEGER,

   birthday DATE,

   job char(32)

) partition by range(birthday)(

starting  minvalue ending ‘9/1/2013’ exclusive,

 starting  '9/1/2013' ending '9/1/2014’ exclusive every(1 months)

);

DB2使用partition by range對表字段進行分區,利用starting 開始時間 ending 結束時間指定分區范圍。上面紅色部分首先建立一個最小時間值到2013-9-1(exclusive表示不包括2313-9-1這一天)的一個分區,第二個starting是自動建立多個分區,建立一個從2013-9-12014-9-1時間范圍每月建立一個分區,也就是12個分區。這里沒有指定分區名稱,系統默認提供分區名是PART0PART1PART2….

How添加一個分區:

ALTER TABLE DB2INST1.PERSON1 ADD PARTITION PART13 STARTING FROM ('2014-9-1') INCLUSIVE ENDING AT ('2014-10-1') EXCLUSIVE IN PERSON_SP2 ;

添加一個范圍是2014-9-12014-10-1PART13分區。

分區過多怎么辦:

分區按時間進行,歷史分區太過,想刪除一些歷史分區怎么辦?DB2提供了一個拆離的功能,可以將歷史分區數據從表中分離(滾出)出去,放在其他表中。

ALTER TABLE DB2INST1.PERSON1 DETACH PARTITION PART1 INTO TABLE DB2INST1.PERSON_HISTORY;

分離后再加入怎么辦:

DB2連接(滾入)功能,可以連接一張表,將制定表中的數據連接到一個分區中。

ALTER TABLE DB2INST1.PERSON1 ATTACH PARTITION PART1 STARTING FROM ('2013-9-1') INCLUSIVE ENDING AT ('2013-10-1') EXCLUSIVE FROM TABLE DB2INST1.PERSON_HISTORY;

 

報警表推薦方案:

報警表單日數據量部局可達10萬級,建議采用兩張表,一張為事實表,一張為歷史表,事實表按天進行分區,歷史表按年進行分區。

1、 初始化表建立一個月的分區,后每個月末建立下個月的分區;

2、 一年后拆離(滾出)上一年上半年的分區數據至歷史表;

3、 為了加快查詢速度,建議在查詢條件主要字段上建立索引;

4、 報警表建立獨立表空間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM