нужна помощь в запросе

Всем привет!
Я никак не могу сконструировать запрос с удовлетворительным времям выполнения.
Сам запрос (выполняется 4-5 сек):

SELECT * FROM client WHERE main_country>'UNITED KINGDOM' AND id>6 ORDER BY main_country, id LIMIT 1

Суть: при каждом запросе выбирать одного клиента, при этом клиенты отсортированы по месту проживания (main_country), и чтобы не пропустить никакого клиента при выборке, они также сортируются по id в пределах одной страны.

Я тут крутил, и составил запрос, который выполняется за 1.5-2 сек:

SELECT * FROM (SELECT * FROM client WHERE main_country>'UNITED KINGDOM' ) AS foo WHERE id>6 limit 1

Но хотелось бы достичь лучшых результатов. Буду очень признателен за какую-то помощь!

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Индекс создайте на таблицу

Индекс создайте на таблицу клиент.
CREATE INDEX ix_client ON client(main_country, id);
Потом попробуйте 1-й запрос

Я пробывал создавать такой

Я пробывал создавать такой индекс, только вот при выполнении запроса (как первого, так и второго) postgres его не использует. У меня постгрес 8.1.20, я пробывал создать такой индекс:

CREATE INDEX ix_client ON client(main_country ASC, id ASC);

но, мне postgresql выдает ошибку: syntax error.
Может еще есть какие-то идеи по поводу конструирования запроса?!

Значит надо погонять explain

Значит надо погонять explain и понять почему у вас не используется индекс. Какие бы запросы вы не конструировали, но при отсутствии индекса их производительность будет никакой, если количество записей в таблице перевалит за несколько тысяч.

Спасибо за советы! Вопрос

Спасибо за советы!

Вопрос решился после устоновки новой Postgres 9.0. Запрос, который на 8.1 выполнялся 4.5 сек, на 9.0 - 0.5 сек. А после установки индекса по двум полям, то время выполения - 0.00 сек. Я думаю результат не так уж и плох))

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023