Я выполняю много запросов sql следующим образом. Представьте, что у нас есть база данных с рейсами, где каждый рейс может иметь исходящий и входящий аэропорт, конечно, дату вылета, количество остановок между проездом и пунктом назначения (на длинных рейсах) и, конечно, цена.Как уменьшить затраты на выбор sql по заказу?
Теперь я хочу выбрать конкретный маршрут и выбрать тот, который имеет наименьшее количество остановок и, конечно же, лучший из них.
CREATE TABLE flights(
id integer
outbound character varying,
inbound character varying,
date timestamp,
stops integer
price numeric
);
CREATE INDEX my_idx ON flights (outbound, inbound, date, stops, price);
select * from flights where outbound = 'SFO' and inbound = 'SYD' and date = '2015-10-10' and stops < 2 order by stops asc, price asc.
Проблема: затраты с использованием explain-analyze
довольно высоки:
Sort (cost=9.78..9.79 rows=1 width=129) (actual time=0.055..0.055 rows=4 loops=1)
Sort Key: stops, price
Sort Method: quicksort Memory: 26kB
-> Index Scan using my_idx (cost=0.42..9.77 rows=1 width=129) (actual time=0.039..0.041 rows=4 loops=1)
Index Cond: ((date = '2015-10-10'::date) AND ((outbound)::text = 'SFO'::text) AND (stops < 2) AND ((inbound)::text = 'SYD'::text))
Total runtime: 0.079 ms
Если я просто сортировать по цене без остановок, расходы в порядке (0,42). Но сортировка по остановкам как-то увеличивает стоимость значительным.
Как я могу сократить расходы?
postgresql 9.3.2
Ваша версия Postgres имеет решающее значение (и всегда должна быть в вопросе). –
'postgresql 9.3.2'е, обновленный выше – membersound
Err ... Ориентировочная стоимость на самом деле крошечная. '0.42..9.77' ->' 9.78..9.79'. Что дорого стоит в поиске строк. Вы уверены, что вам следует беспокоиться о стоимости сортировки * четырех строк? :-) –