Beroende på förhållandena kan det vara logiskt omöjligt att använda något index för att hjälpa ett komplext tillstånd med OR
uttryck.
Liksom MySQL, PostgreSQL 8.0 och tidigare tillstånd i deras dokument om index :
Med PostgreSQL 8.1 har detta ändrats .
Men om detta inte hjälper kan du använda UNION
lösning du försökte (detta är en vanlig lösning för MySQL-användare, som fortsätter att ha en begränsning av ett index per tabell).
Du bör kunna beställa resultaten av en UNION
fråga, men du måste använda parenteser för att ange att ORDER BY
gäller resultatet av UNION
, inte bara till den sista underfrågan i kedjan.
(SELECT ... )
UNION
(SELECT ... )
UNION
(SELECT ... )
ORDER BY columnname;
Jag hoppas det här hjälper; Jag är ingen expert på PostgreSQL-optimeraren. Du kan prova att söka i e-postlistarkiven , eller fråga på IRC-kanalen .