Index on parent/child hierarchy

Поиск
Список
Период
Сортировка
От Jason Armstrong
Тема Index on parent/child hierarchy
Дата
Msg-id CAF2ce0pwqYLuaxphXMMMET8dyuxYSY3+RaHosv7qLN6+GQPniQ@mail.gmail.com
обсуждение исходный текст
Ответы Re: Index on parent/child hierarchy  (Simon Riggs <simon@2ndQuadrant.com>)
Re: Index on parent/child hierarchy  (Merlin Moncure <mmoncure@gmail.com>)
Список pgsql-general
Hi

I'm looking for advice on the best way to index a table that is defined as:

create table uuid.master(id uuid, parent uuid references
uuid.master(id), type_id smallint, primary key(id));

Besides the primary key, I have these two indices on the table too:
CREATE INDEX master_parent_idx ON uuid.master(parent);
CREATE INDEX master_type_idx ON uuid.master(type_id);

I have data arranged in four levels (ie type_id is from 1 to 4):

1. id=A type_id=1
2.  id=B parent=A type_id=2
3.   id=C parent=B type_id=3
4.    id=D parent=C type_id=4
2.  id=E parent=A type_id=2
3.   id=F parent=E type_id=3
4.    id=G parent=F type_id=4
4.    id=H parent=F type_id=4
4.    id=I parent=F type_id=4
3.   id=J parent=E type_id=3
4.    id=K parent=J type_id=4

I want to count all type_id=4 for a particular type_id=1 uuid.

I use this query:

SELECT count(t4.id)
FROM uuid.master AS t4
INNER JOIN uuid.master AS t3 ON t4.parent=t3.id
INNER JOIN uuid.master AS t2 ON t3.parent=t2.id
INNER JOIN uuid.master AS t1 ON t2.parent=t1.id
WHERE t1.id=UUID

Apart from creating a separate table to keep track of the counts, is
there a good way to index the table to help?

Regards,

--
Jason Armstrong

В списке pgsql-general по дате отправления:

Предыдущее
От: Chris Angelico
Дата:
Сообщение: Re: Best way to create unique primary keys across schemas?
Следующее
От: Ivan Radovanovic
Дата:
Сообщение: Logging access to data in database table