PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wiele indeksów a pojedynczy indeks w wielu kolumnach w postgresql

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy można dodać własne ciągi do Django SearchVectorField?

  2. Zabezpieczenia na poziomie wiersza nie działają dla właściciela tabeli

  3. Resetowanie kolumny automatycznego przyrostu z powrotem do 0 dziennie

  4. jak przekazać zmienną do polecenia kopiowania w Postgresql

  5. Jak wygenerować uuid za pomocą PostgreSQL 8.4.4 na Ubuntu 10.04?