A seconda delle condizioni, potrebbe essere logicamente impossibile utilizzare qualsiasi indice per aiutare una condizione complessa utilizzando OR
espressioni.
Come MySQL, PostgreSQL 8.0 e precedenti affermano nei loro documenti sugli indici :
Con PostgreSQL 8.1, questo è cambiato .
Tuttavia, se ciò non aiuta, puoi utilizzare UNION
soluzione che hai provato (questa è una soluzione comune per gli utenti MySQL, che continua ad avere una limitazione di un indice per tabella).
Dovresti essere in grado di ordinare i risultati di un UNION
query, ma devi usare le parentesi per specificare che quel ORDER BY
si applica al risultato della UNION
, non solo all'ultima sottoquery della catena.
(SELECT ... )
UNION
(SELECT ... )
UNION
(SELECT ... )
ORDER BY columnname;
Spero che questo aiuti; Non sono un esperto dell'ottimizzatore PostgreSQL. Potresti provare a cercare negli archivi della mailing list o chiedendo sul canale IRC .