Pruning、Reference Partition、Exchange Partition
Pruning
分割槽裁剪就是執行計劃裡面的東西,不用自己去設定什麼(select table時不指定的分割槽名的情況下),最佳化器可以自動從FROM和WHERE字句里根據分割槽鍵提取出需要掃描的分割槽,從而避免全表掃描,減少掃描的資料塊,提高效能。相關的欄位dba_tab_partitions.partition_name、dba_tab_partitions.partition_position。
分割槽裁剪分為靜態和動態,靜態分割槽裁剪發生在編譯階段,動態分割槽裁剪發生在執行階段
靜態裁剪:就是oracle知道走哪幾個分割槽,比如where 條件過濾後知道某個分割槽,執行計劃的pstart和pstop顯示具體分割槽號
動態裁剪:如果在解析階段無法知道需要掃描多少分割槽,只有在執行時才能確定,執行計劃的pstart和pstop顯示KEY(SQ)或:BF0000
PARTITION RANGE ALL:掃描所有分割槽(具體哪些分割槽可參考執行計劃中Pstart、Pstop兩個欄位)
PARTITION RANGE SINGLE:掃描單個分割槽(具體哪些分割槽可參考執行計劃中Pstart、Pstop兩個欄位)
PARTITION RANGE ITERATOR:掃描多個分割槽再做分割槽合併(具體哪些分割槽可參考執行計劃中Pstart、Pstop兩個欄位)
Reference Partition
Reference Partition針對的業務場景是主外來鍵關聯。主表分割槽之後,藉助Reference Partition可以實現自動的子表分割槽(不管子表上有無分割槽鍵)。經過Reference Partition分割槽之後,在同一個主表分割槽中的資料記錄,對應到的子表記錄,全部都在相同的子表分割槽上。
Exchange Partition
Exchange Partition就是某個分割槽和實體表進行資料交換,分割槽的資料到了實體表,實體表的資料到了分割槽
You can convert a partition (or subpartition) into a nonpartitioned table, and a nonpartitioned table into a partition (or subpartition) of a partitioned table by exchanging their data segments
其實就是類似改了下資料字典,把分割槽和實體表的segment頭部換了下,資料存放的block沒有動
現實中使用Exchange Partition常見的場景如:比如有兩張分割槽表,一張是歷史表,一張是當前表,需要定期把當前表6個月前的資料匯入歷史表怎麼弄呢?
因為分割槽表無法直接和分割槽表進行資料交換,所以我們可以使用Exchange Partition的功能,使用空的實體表做中轉,把當前表6個月前的一個個分割槽匯入到一個個實體表中,再把一個個實體表的資料匯入歷史表的一個個空的新建分割槽(使用空的實體表原因是,當前表和實體表做Exchange時,不會有資料寫入當前表,Exchange後實體表再和歷史表的空的新建分割槽Exchange時,實體表又變成了空表)
分割槽表A要把一些資料遷移到分割槽表B
1、A表和B表的表結構欄位順序和欄位名稱要一樣
2、如果兩個分割槽都是interval的話,是無法保證兩個分割槽的分割槽名字一樣的
原因是interval是系統自動命名的,中間錶轉移到目標表時,目標表必須存在一個分割槽名字,才能轉換過去,但是目標表的分割槽名字怎麼可能會和源表的分割槽名字一樣呢
分割槽裁剪就是執行計劃裡面的東西,不用自己去設定什麼(select table時不指定的分割槽名的情況下),最佳化器可以自動從FROM和WHERE字句里根據分割槽鍵提取出需要掃描的分割槽,從而避免全表掃描,減少掃描的資料塊,提高效能。相關的欄位dba_tab_partitions.partition_name、dba_tab_partitions.partition_position。
分割槽裁剪分為靜態和動態,靜態分割槽裁剪發生在編譯階段,動態分割槽裁剪發生在執行階段
靜態裁剪:就是oracle知道走哪幾個分割槽,比如where 條件過濾後知道某個分割槽,執行計劃的pstart和pstop顯示具體分割槽號
動態裁剪:如果在解析階段無法知道需要掃描多少分割槽,只有在執行時才能確定,執行計劃的pstart和pstop顯示KEY(SQ)或:BF0000
PARTITION RANGE ALL:掃描所有分割槽(具體哪些分割槽可參考執行計劃中Pstart、Pstop兩個欄位)
PARTITION RANGE SINGLE:掃描單個分割槽(具體哪些分割槽可參考執行計劃中Pstart、Pstop兩個欄位)
PARTITION RANGE ITERATOR:掃描多個分割槽再做分割槽合併(具體哪些分割槽可參考執行計劃中Pstart、Pstop兩個欄位)
Reference Partition
Reference Partition針對的業務場景是主外來鍵關聯。主表分割槽之後,藉助Reference Partition可以實現自動的子表分割槽(不管子表上有無分割槽鍵)。經過Reference Partition分割槽之後,在同一個主表分割槽中的資料記錄,對應到的子表記錄,全部都在相同的子表分割槽上。
Exchange Partition
Exchange Partition就是某個分割槽和實體表進行資料交換,分割槽的資料到了實體表,實體表的資料到了分割槽
You can convert a partition (or subpartition) into a nonpartitioned table, and a nonpartitioned table into a partition (or subpartition) of a partitioned table by exchanging their data segments
其實就是類似改了下資料字典,把分割槽和實體表的segment頭部換了下,資料存放的block沒有動
現實中使用Exchange Partition常見的場景如:比如有兩張分割槽表,一張是歷史表,一張是當前表,需要定期把當前表6個月前的資料匯入歷史表怎麼弄呢?
因為分割槽表無法直接和分割槽表進行資料交換,所以我們可以使用Exchange Partition的功能,使用空的實體表做中轉,把當前表6個月前的一個個分割槽匯入到一個個實體表中,再把一個個實體表的資料匯入歷史表的一個個空的新建分割槽(使用空的實體表原因是,當前表和實體表做Exchange時,不會有資料寫入當前表,Exchange後實體表再和歷史表的空的新建分割槽Exchange時,實體表又變成了空表)
分割槽表A要把一些資料遷移到分割槽表B
1、A表和B表的表結構欄位順序和欄位名稱要一樣
2、如果兩個分割槽都是interval的話,是無法保證兩個分割槽的分割槽名字一樣的
原因是interval是系統自動命名的,中間錶轉移到目標表時,目標表必須存在一個分割槽名字,才能轉換過去,但是目標表的分割槽名字怎麼可能會和源表的分割槽名字一樣呢
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2143415/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Partition Pruning和Partition-Wise Joins
- Clique Partition
- oracle partition by group by,詳解partition by和group by對比Oracle
- 分割槽Partition
- B. Range and Partition
- oracle partition by 語法Oracle
- 7.74 DATAOBJ_TO_PARTITIONOBJ
- 86. Partition List
- 7.73 DATAOBJ_TO_MAT_PARTITIONOBJ
- 3-Partition 問題
- Peace or partition? Cyprus - Espresso EconomistEspresso
- Codeforces 1948E Clique Partition
- Partition|Disk Utility 如何分割磁碟
- ROWNUMBER() OVER( PARTITION BY COL1
- 分割槽partition知識點
- Spark學習——分割槽Partition數Spark
- [LeetCode] 416. Partition Equal Subset SumLeetCode
- 分割槽函式Partition By的基本用法函式
- PostgreSQL DBA(94) - PG 12 Improving Partition(Select)SQL
- PostgreSQL DBA(93) - PG 12 Improving Partition(Insert)SQL
- Kafka分割槽分配策略(Partition Assignment Strategy)Kafka
- Oracle Partition 分割槽詳細總結Oracle
- PostgreSQL DBA(95) - PG 12 Partition(out of shared memory)SQL
- How to Add a New Disk new partition in centos7CentOS
- 分割槽函式partition by的基本用法【轉載】函式
- [20191203]enq: ZA - add std audit table partition.txtENQ
- Hadoop中java.lang.ClassCastException: partition解決方法HadoopJavaASTException
- TiDB 原始碼閱讀系列文章(二十)Table PartitionTiDB原始碼
- QOJ #1280.Fibonacci Partition/Fibonacci性質大雜燴
- (二)《SQL進階教程》學習記錄--GROUP BY、PARTITION BYSQL
- ext4 lvreduce報錯superblock or the partition table is likely to be corruptVRBloC
- codeforce 686div3 F Array Partition單調棧
- MySQL 千萬級資料表 partition 實戰應用MySql
- Oracle查詢Interval partition分割槽表內資料Oracle
- 使用parted建立大分割槽時 mkpart Warning: The resulting partition is not properly
- 從簡單的快速排序說起-Partition-ThreePartition-TopK排序TopK
- row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
- 通過MOVE PARTITION來回收已經使用的空間
- MySQL全面瓦解29:使用Partition功能實現水平分割槽MySql