У меня есть две таблицы: A
и P
.Я хочу получить информацию из всех строк в A
, чей идентификатор находится во временной таблице, которую я создал, tmp_ids
.Однако в таблице P
есть дополнительная информация о A
, foo
, и я тоже хочу получить эту информацию.У меня есть следующий запрос:
SELECT A.H_id AS hid,
A.id AS aid,
P.foo, A.pos, A.size
FROM tmp_ids, P, A
WHERE tmp_ids.id = A.H_id
AND P.id = A.P_id
Я заметил, что это происходит медленно, и когда я попросил Postgres объяснить, я заметил, что он объединяет tmp_ids
с индексом A
, который я создал для H_id
с вложенной петлей.Однако он хэширует все P
перед выполнением хеш-соединения с результатом первого слияния.P
довольно большой, и я думаю, что это занимает все время.Зачем это создает хэш там?P.id
является первичным ключом P
, а A.P_id
имеет собственный индекс.
ОБНОВЛЕНИЕ: Все типы данных являются INTEGER, кроме A.size
, который является ДВОЙНОЙ ТОЧНОСТЬЮ, и P.foo
, который является VARCHAR.Я использую PostgreSQL версии 8.4.
Вот объяснение: http://explain.depesz.com/s/WBo.