sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan tvinger jeg Postgres til at bruge et bestemt indeks?

Hvis du antager, at du spørger om den almindelige "indeksantydning"-funktion, der findes i mange databaser, giver PostgreSQL ikke en sådan funktion. Dette var en bevidst beslutning truffet af PostgreSQL-teamet. Et godt overblik over hvorfor og hvad du i stedet kan gøre, kan findes her. Grundene er dybest set, at det er et performance-hack, der har en tendens til at give flere problemer senere hen, efterhånden som dine data ændres, hvorimod PostgreSQL's optimizer kan revurdere planen baseret på statistikken. Med andre ord, hvad der kunne være en god forespørgselsplan i dag, vil sandsynligvis ikke være en god forespørgselsplan for alle tider, og indekshints fremtvinger en bestemt forespørgselsplan for altid.

Som en meget stump hammer, nyttig til test, kan du bruge enable_seqscan og enable_indexscan parametre. Se:

  • Undersøgelse af indeksbrug
  • enable_ parametre

Disse er ikke egnede til løbende produktionsbrug . Hvis du har problemer med valg af forespørgselsplan, bør du se dokumentationen for at spore problemer med forespørgselsydeevne. Indstil ikke bare enable_ params og gå væk.

Medmindre du har en meget god grund til at bruge indekset, kan Postgres træffe det rigtige valg. Hvorfor?

  • For små tabeller er det hurtigere at lave sekventielle scanninger.
  • Postgres bruger ikke indekser, når datatyperne ikke matcher korrekt, du skal muligvis inkludere passende casts.
  • Dine planlæggerindstillinger kan forårsage problemer.

Se også dette gamle nyhedsgruppeindlæg.



  1. T-SQL Datetime Data Type

  2. Indsamlingsmetode:FINDER Funktion i Oracle-databasen

  3. Hvordan får man mysqli til at kaste undtagelser ved hjælp af MYSQLI_REPORT_STRICT?

  4. SQL Server:Hvordan bruger man UNION med to forespørgsler, der BEGGE har en WHERE-klausul?