Всем привет!
Я никак не могу сконструировать запрос с удовлетворительным времям выполнения.
Сам запрос (выполняется 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 сек. Я думаю результат не так уж и плох))