sql >> Databasteknik >  >> RDS >> PostgreSQL

Sammansatt index med tre nycklar, vad händer om jag hoppar över den mittersta?

Postgres kan använda icke-ledande kolumner i ett b-trädindex, men i ett mycket mindre effektivt läge.

Om den första kolumnen är mycket selektiv (endast få rader per A ) så kommer du knappast att märka någon skillnad i prestanda eftersom båda åtkomstmetoderna (även en sekventiell skanning över den reducerade uppsättningen) är billiga. Prestandaträffen växer med antalet rader per A .

För det fall du beskriver föreslår jag att du skapar indexet på (A, C, B) eller (C, A, B) (se bara till att B kommer sist) för att optimera prestandan. På så sätt får du bästa prestanda för frågor på (A, B, C) och på (A, C) likadana.

Till skillnad från sekvensen av kolumner i indexet spelar sekvensen av predikat i frågan ingen roll.

Vi har diskuterat detta mycket ingående på dba.SE:

Observera att det inte gör det oavsett om du leder med A, C eller C, A för det aktuella fallet:

Det finns också några andra överväganden, men din fråga innehåller inte alla relevanta detaljer.



  1. SQL koppla 2 tabeller till 1 tabell

  2. MYSQL använder spatialindex

  3. Få prisinformation för en bokningsbar produkt med datumintervall i WooCommerce

  4. php POST-formulärfråga uppdatera dynamisk variabel