sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad som ska indexeras på frågor med många kolumner i WHERE-satsen

Du måste ta reda på vad WHERE satser du kommer att använda med den här frågan, hur ofta var och en kommer att inträffa och hur selektiv varje villkor kommer att vara.

  • Indexera inte för frågor som förekommer sällan om du inte måste.

  • Använd flerkolumnindex, börja med de kolumner som kommer att förekomma i en = jämförelse.

  • Angående ordningen på kolumner i ett index med flera kolumner, börja med de kolumner som kommer att användas i en fråga för sig (ett index kan användas för en fråga med endast några av dess kolumner, förutsatt att de är i början av indexet).

  • Du kan utelämna kolumner med låg selektivitet, som gender .

Till exempel, med dina frågor ovan, om de alla är vanliga och alla kolumner är selektiva, skulle dessa index vara bra:

... ON apartments (city_id, rooms, size)

... ON apartments (area_id, ad_type, price)

... ON apartments (area_id, ad_type, published_at)

Dessa index kan också användas för WHERE satser med endast area_id eller city_id i dem.

Det är dåligt att ha för många index.

Om ovanstående metod skulle leda till för många index, t.ex. eftersom användaren kan välja godtyckliga kolumner för WHERE klausul är det bättre att indexera enskilda kolumner eller ibland kolumnpar som regelbundet går ihop.

På så sätt kan PostgreSQL välja en bitmappsindexsökning att kombinera flera index för en fråga. Det är mindre effektivt än en vanlig indexskanning , men vanligtvis bättre än en sekventiell genomsökning .



  1. Row Goals, Del 4:Anti Join Anti Pattern

  2. Hur man migrerar mina tabeller från min asp.net kärnapp på linux

  3. PHP kontrollera databasens datumfält med ett php-datum

  4. syntaxfel, oväntat 'mysql_connect' (T_STRING)