Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> RE: Another partitioning question

RE: Another partitioning question

From: Deshpande, Kirti <kirti.deshpande_at_verizon.com>
Date: Fri, 15 Mar 2002 16:53:20 -0800
Message-ID: <F001.0042B408.20020315165320@fatcity.com>


Hi Dennis,

Yes, your are right.
Thanks for catching it.
I messed up.  

However, the order is still left to right...

While deciding on the partition when composite partition key is involved, the partition is selected as follows (for 2 column composite key):

  1. Value < column1 then select that partition.
  2. If Value = column1 then if value < column2 then select that partition.

Here is what I did:

SQL> create table t1 (c varchar2(1), n number(4))   2 partition by range (c, n)

  3  ( partition p1 values less than ('X', 400),
  4    partition p2 values less than ('Y', 800),
  5    partition p3 values less than (maxvalue, maxvalue)
  6 );

Table created.

SQL> insert into t1 values ('A', 900);

1 row created.

SQL> insert into t1 values ('X', 900);

1 row created.

SQL> insert into t1 values ('X', 100);

1 row created.

SQL> insert into t1 values ('Y', 900);

1 row created.

SQL> insert into t1 values ('Y', 500);

1 row created.

SQL> insert into t1 values ('Z', 1000);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t1 partition (p1);

C N
- ----------

A        900
X        100

SQL> select * from t1 partition (p2);

C N
- ----------

X        900
Y        500

SQL> select * from t1 partition (p3);

C N
- ----------

Y        900
Z       1000

Unless I am still confused :(

Thanks.

-----Original Message-----

Sent: Friday, March 15, 2002 2:48 PM
To: Multiple recipients of list ORACLE-L

Kirti - If I can humbly beg to differ. I assumed that it would work the way you described. However, I conducted some tests and found to my surprise that it seems to base decisions on the right-most column (although I only tested two columns). Therefore, to use your examples,

P1 -- values less than ('X', 999999) will contain values where column1 = 'X' and column2 less than 999999
P2 -- values less than ('Y', 999999) will contain values where column1 = 'Y' and column2 less than 999999.

Since my column1 only has two values, I didn't test what it does with "unlimited" in the first column.
 I'm not saying that didn't miss something. My ulterior motive for responding on the list is that I frequently get some fuzzy ideas clarified by others on the list.
Dennis Williams
DBA
Lifetouch, Inc.
dwilliams_at_lifetouch.com

-----Original Message-----

Sent: Friday, March 15, 2002 1:33 PM
To: Multiple recipients of list ORACLE-L

If I understood the original question correctly, with the given conditions there will be three partitions. Oracle evaluates concatenated key from left to right order, so if the type and seq number are the partitioning columns here then the partitions would be:
P1 -- values less than ('X', 999999) This will contain everything where type < X
P2 -- values less then ('Y', 999999) This will contain everything where type = X
P3 -- values less then (MAXVALUE, MAXVALUE) This will contain everything else. I am using 999999 to denote the highest value for the seq number.

Any other ideas?

-----Original Message-----

Sent: Friday, March 15, 2002 11:28 AM
To: Multiple recipients of list ORACLE-L

John - At last a question I can answer! Anyway I think so. You can partition on a concatenated key. I just did this on our data warehouse and brought query times from over 2 minutes to under 10 seconds. Here is what my partition looks like.

create table sumacctfact2
nologging
pctfree 5
partition by range ( periodgrain, periodenddate ) (
partition sum_fy_01 values less than ('FY', to_date('01011999','mmddyyyy'))

   tablespace data_fy_01
   storage ( maxextents unlimited ),
partition sum_fy_02 values less than ('FY', to_date('01012000','mmddyyyy'))

   tablespace data_fy_02
   storage ( maxextents unlimited ),
partition sum_fy_03 values less than ('FY', to_date('01012001','mmddyyyy'))

   tablespace data_fy_03
   storage ( maxextents unlimited ),
partition sum_fy_04 values less than ('FY', to_date('02012001','mmddyyyy'))

   tablespace data_fy_04
   storage ( maxextents unlimited ),

Dennis Williams
DBA
Lifetouch, Inc.
dwilliams_at_lifetouch.com

-----Original Message-----

Sent: Friday, March 15, 2002 10:38 AM
To: Multiple recipients of list ORACLE-L

I think what my boss is asking me to do is not possible, but since I don't have much experience with partitioning I thought I'd ask here (I did read some of manuals but didn't find an answer that suited my conditions). My boss wants a table partitioned by 2 columns - seq_no and type. If the type = 'X' then it's just a range partition, but then he wants another partition that contains all data that type!='X' but is inclusive of the entire range. Is this possible?
Something like (I know this syntax isn't correct ) create table test_part(
id number(11) unique,
owner_id number(11) not null,
type varchar2(30) not null,
name varchar2(40))
partition by range(owner_id,type)
(partition p1 values less than (20000000) and type ='X' tablespace test, partition p2 values less than (50000000) and owner_table ='X' tablespace test,
partition p3 values less than (100000000) and owner_table ='X' tablespace test,
partition p4 values less than (500000000) and owner_table ='X' tablespace test,
partition p5 values less than (1000000000) and owner_table ='X' tablespace test)
partition p6 values less that (1000000000) and owner_table !='X' tablespace test;

-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Shaw John-P55297
  INET: P55297_at_motorola.com
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Deshpande, Kirti
  INET: kirti.deshpande_at_verizon.com

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists

--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).
Received on Fri Mar 15 2002 - 18:53:20 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US