Afhængigt af betingelserne kan det være logisk umuligt at bruge et hvilket som helst indeks til at hjælpe en kompleks tilstand ved hjælp af OR
udtryk.
Ligesom MySQL, PostgreSQL 8.0 og tidligere tilstande i deres dokumenter om indekser :
Med PostgreSQL 8.1 er dette ændret .
Men hvis dette ikke hjælper, kan du bruge UNION
løsning, du prøvede (dette er en almindelig løsning for MySQL-brugere, som fortsat har en begrænsning på ét indeks pr. bord).
Du bør være i stand til at bestille resultaterne af en UNION
forespørgsel, men du skal bruge parenteser for at angive, at ORDER BY
gælder for resultatet af UNION
, ikke kun til den sidste underforespørgsel i kæden.
(SELECT ... )
UNION
(SELECT ... )
UNION
(SELECT ... )
ORDER BY columnname;
Jeg håber det hjælper; Jeg er ikke ekspert i PostgreSQL optimizer. Du kan prøve at søge i mailinglistearkiverne , eller spørg på IRC-kanalen .