
Ask Oracle 社区 | www.askoracle.org
技术交流群:212299542
段 s_productid 做 hash 子分区:
CREATE TABLE askoracle_range_hash(
s_productid NUMBER,
s_saledate DATE,
s_custid NUMBER,
s_totalprice NUMBER)
PARTITION BY RANGE (s_saledate)
SUBPARTITION BY HASH (s_productid) SUBPARTITIONS 8
(PARTITION sal99q1 VALUES LESS THAN
(TO_DATE('01-APR-1999', 'DD-MON-YYYY')),
PARTITION sal99q2 VALUES LESS THAN
(TO_DATE('01-JUL-1999', 'DD-MON-YYYY')),
PARTITION sal99q3 VALUES LESS THAN
(TO_DATE('01-OCT-1999', 'DD-MON-YYYY')),
PARTITION sal99q4 VALUES LESS THAN
(TO_DATE('01-JAN-2000', 'DD-MON-YYYY')));
SELECT *
FROM askoracle_range_hash
WHERE s_saledat0065 BETWEEN (TO_DATE('01-JUL-1999', 'DD-MON-YYYY')) AND
(TO_DATE('01-OCT-1999', 'DD-MON-YYYY'))
AND s_productid = 1200;
Oracle 在分区列上使用谓词进行 Partition Pruning(分区修剪),过程如下:
1.当使用 Range 分区时,Oracle 会直接访问 sal199q2 和 sal199q3
2.当使用 hash 子分区时,Oracle 会访问 sal199q2 和 sal199q3 的 hash 子分区里
s_productid=1200 的所有行,
当然 Oracle 11g 新增的两个分区表:Eference-partitioned table 和 Virtual
column-based partitioned tables 也可以在 SQL 中采用 Partition Pruning(分区修剪)
技术。
4.How to Identify Whether Partition Pruning Has Been Used
当 Oracle 使用 Partition Pruning(分区修剪)时,我们可以通过 EXPLAIN PLAN
评论