Thursday, August 30, 2012

how-hash-partition-algorithm-works in oracle

--From
http://ocpdba.wordpress.com/2010/11/09/how-hash-partition-algorithm-works/

SQL> create table hashtab (
  2  col1 number,
  3  col2 number,
  4  col3 number)
  5  partition by hash (col1) partitions 4;

Table created.

SQL> @C:\Users\anandy\Scripts\loop.sql

PL/SQL procedure successfully completed.

SQL> exec dbms_stats.gather_table_stats('SCOTT','HASHTAB');

PL/SQL procedure successfully completed.

SQL> select partition_name, num_rows from user_tab_partitions where table_name='
HASHTAB';

PARTITION_NAME                   NUM_ROWS
------------------------------ ----------
SYS_P41                              2473
SYS_P42                              2488
SYS_P43                              2532
SYS_P44                              2507

SQL> drop table hashtab;

Table dropped.

SQL> create table hashtab (
  2  col1 number,
  3  col2 number,
  4  col3 number)
  5  partition by hash (col2) partitions 4;

Table created.

SQL> @C:\Users\anandy\Scripts\loop.sql

PL/SQL procedure successfully completed.

SQL> exec dbms_stats.gather_table_stats('SCOTT','HASHTAB');

PL/SQL procedure successfully completed.

SQL> select partition_name, num_rows from user_tab_partitions where table_name='
HASHTAB';

PARTITION_NAME                   NUM_ROWS
------------------------------ ----------
SYS_P45                              2330
SYS_P46                              2450
SYS_P47                              2610
SYS_P48                              2610

SQL> drop table hashtab;

Table dropped.

SQL> create table hashtab (
  2  col1 number,
  3  col2 number,
  4  col3 number)
  5  partition by hash (col3) partitions 4;

Table created.

SQL> @C:\Users\anandy\Scripts\loop.sql

PL/SQL procedure successfully completed.

SQL> exec dbms_stats.gather_table_stats('SCOTT','HASHTAB');

PL/SQL procedure successfully completed.

SQL> select partition_name, num_rows from user_tab_partitions where table_name='
HASHTAB';

PARTITION_NAME                   NUM_ROWS
------------------------------ ----------
SYS_P49                                 0
SYS_P50                              2500
SYS_P51                              2500
SYS_P52                              5000

SQL>

--Script to insert data

begin
for i in 1..10000 loop
insert into hashtab values(dbms_random.random,mod(i,1000),mod(i,4));
end loop;
end;
/

No comments:

Post a Comment