hash分区 可以有效的将表的数据进行均匀分布,对于查询来说,分区过滤可以大大的降低逻辑IO,从而提高查询性能。
下面进行测试:
[@more@]create table TEST
(
ID NUMBER,
NAME VARCHAR2(10)
)
partition by hash (ID)
(
partition SYS_P1
tablespace SYSTEM,
partition SYS_P2
tablespace SYSTEM,
partition SYS_P3
tablespace SYSTEM,
partition SYS_P4
tablespace SYSTEM
)
;
-- 4个hash 分区
SQL> desc test
名称 是否为空? 类型
----------------------------------------- -------- ----------------
ID NUMBER
NAME VARCHAR2(10)
--插入100条记录
SQL> begin
2 for i in 1..100 loop
3 insert into test values(i,'a');
4 end loop;
5 commit;
6 end;
7 /
PL/SQL 过程已成功完成。
SQL> select substr(get_rowid(rowid),20,2),count(1) from test group by substr(get_rowid(rowid),20,2);
SUBSTR(G COUNT(1)
-------- ----------
92 20
93 28
94 25
95 27
--看到4个分区的数据基本上是均匀分布的
--进行查询,测试分区过滤
SQL> exec dbms_stats.gather_table_stats(user,'TEST',cascade=>true);
PL/SQL 过程已成功完成。
SQL> explain plan for select * from test where id=12;
已解释。
SQL> select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost | Pstart| Pstop |
------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5 | 2 | | |
|* 1 | TABLE ACCESS FULL | TEST | 1 | 5 | 2 | 2 | 2 |
------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("TEST"."ID"=12)
Note: cpu costing is off
已选择14行。
SQL>
--有效的过滤了分区
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19015/viewspace-907615/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/19015/viewspace-907615/