@ a_horse уже намекает на возможную синтаксическую ошибку. Попробуйте:
SELECT DISTINCT <b>ON (a.id) a.id,</b> a.field_1, a.field_2, a.field_3, ...
FROM table_a a
-- JOIN table_b b ON ???
WHERE a.field_8 = 'o'
ORDER BY a.id, a.field_2 DESC
LIMIT 10;
Обратите внимание на выделение жирным шрифтом и прочтите предложение DISTINCT в руководстве .
Также может помочь индекс field_8
.
многоколонный индекс на (field_8, id, field_2)
может помочь еще больше, если вы можете сузить его до этого (и если это порядок сортировки, который вы хотите, в чем я сомневаюсь).
Если вы хотите, чтобы результат сначала был отсортирован по a.field_2 DESC
:
В PostgreSQL 9.1 , если id
является первичным ключом :
SELECT a.id, a.field_1, a.field_2, a.field_3, ...
FROM table_a a
-- JOIN table_b b ON ???
WHERE a.field_8 = 'o'
GROUP BY a.id -- primary key takes care of all columns in table a
ORDER BY a.field_2 DESC
LIMIT 10;