sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur tvingar jag Postgres att använda ett visst index?

Om du antar att du frågar om den vanliga "index hinting"-funktionen som finns i många databaser, tillhandahåller PostgreSQL inte en sådan funktion. Detta var ett medvetet beslut som togs av PostgreSQL-teamet. En bra översikt över varför och vad du kan göra istället hittar du här. Anledningarna är i grunden att det är ett prestandahack som tenderar att orsaka fler problem senare när dina data ändras, medan PostgreSQL:s optimerare kan omvärdera planen baserat på statistiken. Med andra ord, vad som kan vara en bra frågeplan idag kommer förmodligen inte att vara en bra frågeplan för alla tider, och indextips tvingar fram en viss frågeplan för all framtid.

Som en mycket trubbig hammare, användbar för testning, kan du använda enable_seqscan och enable_indexscan parametrar. Se:

  • Undersöker indexanvändning
  • enable_ parametrar

Dessa är inte lämpliga för pågående produktionsanvändning . Om du har problem med val av frågeplan bör du se dokumentationen för att spåra problem med frågeprestanda. Ställ inte bara in enable_ params och gå iväg.

Om du inte har en mycket bra anledning att använda indexet, kan Postgres göra rätt val. Varför?

  • För små tabeller är det snabbare att göra sekventiella genomsökningar.
  • Postgres använder inte index när datatyperna inte matchar korrekt, du kan behöva inkludera lämpliga casts.
  • Dina planerarinställningar kan orsaka problem.

Se även detta gamla nyhetsgruppsinlägg.



  1. Hoppa till Start Testdriven Databas Development (TDDD)

  2. Hur uppstår databaskorruption?

  3. Hur väljer jag en hel rad som har det största ID:t i tabellen?

  4. Skillnaden mellan VARCHAR2(10 CHAR) och NVARCHAR2(10)