From: | Genix <genix(at)list(dot)ru> |
---|---|
To: | pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org> |
Subject: | не работает индекс по таблице |
Date: | 2005-10-22 13:57:40 |
Message-ID: | 435A4554.6060103@list.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
Приветствую!
Имеем несколько действий:
drop table t1;
select post_addresses_id into t1 from persons where $условие;
create index t1_ on t1 (post_addresses_id);
select count(*) from addresses where
exists ( select addresses_id from t1 where
addresses.addresses_id=t1.post_addresses_id)
на самом деле, в последнем запросе вместо select count(*) нужно делать
удаление, но для проверки я использовал именно этот вариант, ибо оба они
выполняются одного порядка времени.
так вот, если все написано так как есть, то последний запрос выполняется
около 8 секунд (у меня небольшой, тестовый набор данных) и по обоим
таблицам идет seq_scan.
если же поменять местами две таблицы, т.е.:
select count(*) from t1 where
exists ( select addresses_id from addresses where
addresses.addresses_id=t1.post_addresses_id)
то запрос пробегается за 40 мс и по таблице addresses подхватывается
индекс. Но ведь удалять-то надо именно из addresses, и такой вариант
условия exists уже не подходит $)
решение было найдено:
set enable_seqscan=false;
вот только возник вопрос, правильно ли что PostgreSQL так сильно ошибается?
--
У каждого в башке свои тараканы...
From | Date | Subject | |
---|---|---|---|
Next Message | Oleg Bartunov | 2005-10-22 17:27:13 | Re: Кодировка |
Previous Message | Maxim Vetrov | 2005-10-22 07:49:24 | Кодировка |