假如 [分區表] 在字段 [createdate] 上進行分區,每個月為一個分區:
2009年6月為分區P200906
2009年7月為分區P200907
2009年8月為分區P200908
。。。
執行SQL 使用分區鍵檢索:
select*from 分區表 t where createdate > to_date('2009-07-12','yyyy-mm-dd') and createdate < to_date('2009-08-12','yyyy-mm-dd')
執行計劃如下,使用分區鍵進行索引,會自動在數據存在的區進行檢索。因為開始區為2,結束區為3,一目了然。
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE ITERATOR Partition start=2 Partition stop=3
TABLE ACCESS FULL Partition start=2 Partition stop=3
執行SQL 不使用分區鍵檢索:
select*from 分區表 t where sms_report_date > to_date('2009-07-12','yyyy-mm-dd') and sms_report_date < to_date('2009-08-12','yyyy-mm-dd')
執行計劃如下:沒有使用分區鍵進行檢索,那么則會查詢全部的表分區。因為要查詢的數據就在2和3分區上,其它的分區數據也被讀取了,增大了數據庫壓力,效率低下。
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE ALL Partition start=1 Partition stop=31
TABLE ACCESS FULL Partition start=1 Partition stop=31
執行SQL 指定使用分區:
select*from 分區表 partition(P200907) t where sms_report_date > to_date('2009-07-12','yyyy-mm-dd') and sms_report_date < to_date('2009-08-12','yyyy-mm-dd')
執行計劃如下:
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE SINGLE Partition start=2 Partition stop=2
TABLE ACCESS FULL Partition start=2 Partition stop=2
2009年6月為分區P200906
2009年7月為分區P200907
2009年8月為分區P200908
。。。
執行SQL 使用分區鍵檢索:
select*from 分區表 t where createdate > to_date('2009-07-12','yyyy-mm-dd') and createdate < to_date('2009-08-12','yyyy-mm-dd')
執行計劃如下,使用分區鍵進行索引,會自動在數據存在的區進行檢索。因為開始區為2,結束區為3,一目了然。
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE ITERATOR Partition start=2 Partition stop=3
TABLE ACCESS FULL Partition start=2 Partition stop=3
執行SQL 不使用分區鍵檢索:
select*from 分區表 t where sms_report_date > to_date('2009-07-12','yyyy-mm-dd') and sms_report_date < to_date('2009-08-12','yyyy-mm-dd')
執行計劃如下:沒有使用分區鍵進行檢索,那么則會查詢全部的表分區。因為要查詢的數據就在2和3分區上,其它的分區數據也被讀取了,增大了數據庫壓力,效率低下。
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE ALL Partition start=1 Partition stop=31
TABLE ACCESS FULL Partition start=1 Partition stop=31
執行SQL 指定使用分區:
select*from 分區表 partition(P200907) t where sms_report_date > to_date('2009-07-12','yyyy-mm-dd') and sms_report_date < to_date('2009-08-12','yyyy-mm-dd')
執行計劃如下:
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE SINGLE Partition start=2 Partition stop=2
TABLE ACCESS FULL Partition start=2 Partition stop=2