W zależności od warunków logicznie niemożliwe może być użycie dowolnego indeksu do pomocy w złożonym warunku przy użyciu OR
wyrażenia.
Podobnie jak MySQL, PostgreSQL 8.0 i wcześniejsze stany w ich dokumentacji indeksów :
W PostgreSQL 8.1 zostało to zmienione .
Jeśli jednak to nie pomoże, możesz użyć UNION
rozwiązanie, które wypróbowałeś (jest to powszechne rozwiązanie dla użytkowników MySQL, które nadal ma ograniczenie jeden indeks na tabelę).
Powinieneś być w stanie zamówić wyniki UNION
zapytanie, ale musisz użyć nawiasów, aby określić, że ORDER BY
dotyczy wyniku UNION
, a nie tylko do ostatniego podzapytania w łańcuchu.
(SELECT ... )
UNION
(SELECT ... )
UNION
(SELECT ... )
ORDER BY columnname;
Mam nadzieję, że to pomoże; Nie jestem ekspertem od optymalizatora PostgreSQL. Możesz spróbować przeszukać archiwa list mailingowych lub zapytać na kanale IRC .