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