2016-08-22 2 views
0

Я знаю, что если у меня есть два запроса, как:Postgresql дизайна индекса: комбинированные индексы упорядоченных

SELECT * FROM fruits WHERE type='apple' 

и

SELECT * FROM fruits WHERE type='orange' AND state='rotten' 

тогда эффективный показатель будет:

CREATE INDEX type_state_index_on_fruits ON fruits(type, state) USING btree; 

С он сможет использовать индекс как для первого, так и для второго запроса.

Однако то, что происходит, если сортировка происходит в этом:

SELECT * FROM fruits WHERE type='orange' AND state='rotten' ORDER BY picked_at ASC 

Могу ли я эффективно создать упорядоченный индекс типа и состояния, но упорядоченный по picket_at, так что база данных не придется делать сортировку после выборки строки в обоих случаях:

SELECT * FROM fruits WHERE type='apple' ORDER BY picked_at ASC 
SELECT * FROM fruits WHERE type='orange' AND state='rotten' ORDER BY picked_at ASC 
+0

[Проверить план выполнения] (https://www.postgresql.org/docs/current/static/sql-explain.html) –

ответ

0

Если вы хотите один индекс для обоих запросов, я рекомендовал бы один на (type, picked_at).

Если вам нужно указать state в индекс, вам потребуются два индекса.