Niezależnie od tego, ile indeksów utworzyłeś na relacji, tylko jeden z nich zostanie użyty w danym zapytaniu (który zależy od zapytania, statystyk itp.). Więc w twoim przypadku nie uzyskasz skumulowanej przewagi, tworząc dwa indeksy jednokolumnowe. Aby uzyskać największą wydajność z indeksu, sugerowałbym użycie indeksu złożonego na (lokalizacja, znacznik czasu).
Zauważ, że zapytania takie jak ... WHERE timestamp BETWEEN smth AND smth
nie użyje powyższego indeksu podczas zapytań takich jak ... WHERE location = 'smth'
lub ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth
będzie. Dzieje się tak, ponieważ pierwszy atrybut w indeksie ma kluczowe znaczenie dla wyszukiwania i sortowania.
Nie zapomnij wykonać
ANALYZE;
po utworzeniu indeksu w celu zbierania statystyk.
Aktualizacja: Jako @MondKin wspomniane w komentarzach niektóre zapytania mogą faktycznie używać kilku indeksów w tej samej relacji. Na przykład zapytanie z OR
klauzule takie jak a = 123 OR b = 456
(przy założeniu, że istnieją indeksy dla obu kolumn). W takim przypadku postgres wykona skanowanie indeksów bitmap dla obu indeksów, zbuduje unię wynikowych bitmap i użyje ich do skanowania sterty bitmap. W pewnych warunkach ten sam schemat może być użyty dla AND
zapytań, ale zamiast sumy byłoby przecięcie.