Thread: Partitions and indexes
Hello
If I have partitioned a table based on a foreign key in a manner where every child table will only have data for single value of the foreign key, do I need to create a index for the foreign key in the primary and/or child tables? I am using version 8.4
With regards
Amitabh
If I have partitioned a table based on a foreign key in a manner where every child table will only have data for single value of the foreign key, do I need to create a index for the foreign key in the primary and/or child tables? I am using version 8.4
With regards
Amitabh
On Fri, Feb 25, 2011 at 1:17 PM, Chetan Suttraway <chetan.suttraway@enterprisedb.com> wrote:
Could you post a detailed set of queries?On Wed, Feb 23, 2011 at 12:52 PM, Amitabh Kant <amitabhkant@gmail.com> wrote:Hello
If I have partitioned a table based on a foreign key in a manner where every child table will only have data for single value of the foreign key, do I need to create a index for the foreign key in the primary and/or child tables? I am using version 8.4
With regards
Amitabh
--
Chetan Sutrave
http://www.enterprisedb.com
A simplified representation would be:
Table T1
id int (PK)
name varchar
--
--
Table T2
id int (PK)
T1id int (FK to T1->id)
--
--
Now if I partition the table T2 based on field T1id, making sure that each distinct T1id is provided its own child table
Table T2C1 (inherited from T2, T1id field only contains 1 for all rows)
Table T2C2 (inherited from T2, T1id field only contains 2 for all rows)
--
--
What I would like to know here is that do I need to add an index for T1id field for either T2 or it's inherited tables (T2C1/T2C2 etc)?
Amitabh
On 26 Feb 2011, at 18:04, Amitabh Kant wrote: > Now if I partition the table T2 based on field T1id, making sure that each distinct T1id is provided its own child table > > Table T2C1 (inherited from T2, T1id field only contains 1 for all rows) > Table T2C2 (inherited from T2, T1id field only contains 2 for all rows) > -- > -- > > What I would like to know here is that do I need to add an index for T1id field for either T2 or it's inherited tables(T2C1/T2C2 etc)? No. Either would be rather pointless. In the child tables all the values in that index would have the same exact value, whichyou don't need as constraint exclusion already pointed the planner to the right table. In the parent table there wouldn'tbe any data to index. Alban Hertroys -- If you can't see the forest for the trees, cut the trees and you'll see there is no forest. !DSPAM:737,4d69400211732483184779!
On 02/26/11 10:01 AM, Alban Hertroys wrote: > On 26 Feb 2011, at 18:04, Amitabh Kant wrote: > >> Now if I partition the table T2 based on field T1id, making sure that each distinct T1id is provided its own child table >> >> Table T2C1 (inherited from T2, T1id field only contains 1 for all rows) >> Table T2C2 (inherited from T2, T1id field only contains 2 for all rows) >> -- >> -- >> >> What I would like to know here is that do I need to add an index for T1id field for either T2 or it's inherited tables(T2C1/T2C2 etc)? > No. Either would be rather pointless. In the child tables all the values in that index would have the same exact value,which you don't need as constraint exclusion already pointed the planner to the right table. In the parent table therewouldn't be any data to index. the whole idea of one table per row sounds rather odd and pointless to me.
On Sat, Feb 26, 2011 at 11:52 PM, John R Pierce <pierce@hogranch.com> wrote:
On 02/26/11 10:01 AM, Alban Hertroys wrote:the whole idea of one table per row sounds rather odd and pointless to me.On 26 Feb 2011, at 18:04, Amitabh Kant wrote:Now if I partition the table T2 based on field T1id, making sure that each distinct T1id is provided its own child tableNo. Either would be rather pointless. In the child tables all the values in that index would have the same exact value, which you don't need as constraint exclusion already pointed the planner to the right table. In the parent table there wouldn't be any data to index.
Table T2C1 (inherited from T2, T1id field only contains 1 for all rows)
Table T2C2 (inherited from T2, T1id field only contains 2 for all rows)
--
--
What I would like to know here is that do I need to add an index for T1id field for either T2 or it's inherited tables (T2C1/T2C2 etc)?
--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general
Not sure I am getting you correctly, but every table will have multiple rows of data, but for every row in a given table, the value of the FK would be the same.
Amitabh
On 02/26/11 10:42 AM, Amitabh Kant wrote: > On Sat, Feb 26, 2011 at 11:52 PM, John R Pierce <pierce@hogranch.com > <mailto:pierce@hogranch.com>> wrote: > > On 02/26/11 10:01 AM, Alban Hertroys wrote: > > On 26 Feb 2011, at 18:04, Amitabh Kant wrote: > > Now if I partition the table T2 based on field T1id, > making sure that each distinct T1id is provided its own > child table > > Table T2C1 (inherited from T2, T1id field only contains 1 > for all rows) > Table T2C2 (inherited from T2, T1id field only contains 2 > for all rows) > -- > -- > > What I would like to know here is that do I need to add an > index for T1id field for either T2 or it's inherited > tables (T2C1/T2C2 etc)? > > No. Either would be rather pointless. In the child tables all > the values in that index would have the same exact value, > which you don't need as constraint exclusion already pointed > the planner to the right table. In the parent table there > wouldn't be any data to index. > > > the whole idea of one table per row sounds rather odd and > pointless to me.<http://www.postgresql.org/mailpref/pgsql-general> > > > Not sure I am getting you correctly, but every table will have > multiple rows of data, but for every row in a given table, the value > of the FK would be the same. ah, I misunderstood the original description. you're not likely to query T2 by T1id, are you? Doing so would return all of one of those inherited tables
On Sun, Feb 27, 2011 at 12:30 AM, John R Pierce <pierce@hogranch.com> wrote:
On 02/26/11 10:42 AM, Amitabh Kant wrote:On Sat, Feb 26, 2011 at 11:52 PM, John R Pierce <pierce@hogranch.com <mailto:pierce@hogranch.com>> wrote:pointless to me.<http://www.postgresql.org/mailpref/pgsql-general>
On 02/26/11 10:01 AM, Alban Hertroys wrote:
On 26 Feb 2011, at 18:04, Amitabh Kant wrote:
Now if I partition the table T2 based on field T1id,
making sure that each distinct T1id is provided its own
child table
Table T2C1 (inherited from T2, T1id field only contains 1
for all rows)
Table T2C2 (inherited from T2, T1id field only contains 2
for all rows)
-- --
What I would like to know here is that do I need to add an
index for T1id field for either T2 or it's inherited
tables (T2C1/T2C2 etc)?
No. Either would be rather pointless. In the child tables all
the values in that index would have the same exact value,
which you don't need as constraint exclusion already pointed
the planner to the right table. In the parent table there
wouldn't be any data to index.
the whole idea of one table per row sounds rather odd and
Not sure I am getting you correctly, but every table will have multiple rows of data, but for every row in a given table, the value of the FK would be the same.
ah, I misunderstood the original description.
you're not likely to query T2 by T1id, are you? Doing so would return all of one of those inherited tables
Almost all queries will have T1id as one of its parameter, although not the only parameter.
Amitabh