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.