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

Indeks złożony z trzema kluczami, co się stanie, jeśli zapytanie pominie środkowy?

Postgres może używać kolumn niebędących wiodącymi w indeksie b-drzewa, ale w znacznie mniej wydajnym trybie.

Jeśli pierwsza kolumna jest bardzo selektywna (tylko kilka wierszy na A ), wtedy prawie nie zauważysz różnicy w wydajności, ponieważ obie metody dostępu (nawet sekwencyjne skanowanie ograniczonego zestawu) są tanie. Trafienie wydajności rośnie wraz z liczbą wierszy przypadających na A .

W przypadku, który opisujesz, sugeruję utworzenie indeksu na (A, C, B) lub (C, A, B) (tylko upewnij się, że B jest ostatni), aby zoptymalizować wydajność. W ten sposób uzyskasz najlepszą wydajność dla zapytań na (A, B, C) i na (A, C) podobne.

W przeciwieństwie do sekwencji kolumn w indeksie, kolejność predykatów w zapytaniu nie ma znaczenia.

Szczegółowo omówiliśmy to na dba.SE:

Pamiętaj, że nie ma znaczenie, czy prowadzisz z A, C lub C, A dla rozpatrywanej sprawy:

Jest jeszcze kilka innych kwestii, ale Twoje pytanie nie zawiera wszystkich istotnych szczegółów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcje refaktoryzacji, aby można było ich używać w ramach CTE

  2. Funkcja LPAD() w PostgreSQL

  3. Uzyskaj różne następujące po sobie zakresy dat z nakładających się zakresów dat

  4. używanie aliasu koalescencja w warunku :koalescencja (max(przypadek, gdy wartość to wartość) jako alias

  5. Dlaczego mogę utworzyć tabelę z PRIMARY KEY na kolumnie dopuszczającej wartość null?