В зависимост от условията, може да е логически невъзможно да се използва който и да е индекс, за да се помогне на сложно условие, като се използва OR изрази.
Подобно на MySQL, PostgreSQL 8.0 и по-ранни версии посочват в своите документи за индекси :
С PostgreSQL 8.1 това е променено .
Ако обаче това не помогне, можете да използвате UNION решение, което сте опитали (това е често срещано решение за потребителите на MySQL, което продължава да има ограничение от един индекс на таблица).
Трябва да можете да поръчате резултатите от UNION заявка, но трябва да използвате скоби, за да посочите, че това ORDER BY важи за резултата от UNION , а не само до последната подзаявка във веригата.
(SELECT ... )
UNION
(SELECT ... )
UNION
(SELECT ... )
ORDER BY columnname;
Надявам се това да помогне; Не съм експерт по оптимизатора на PostgreSQL. Може да опитате да потърсите в архивите на пощенските списъци , или попитайте в IRC канала .