PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erweiterte Indizierung mit OR-verknüpften Bedingungen (pgsql)

Abhängig von den Bedingungen kann es logisch unmöglich sein, einen Index zu verwenden, um einer komplexen Bedingung mit OR zu helfen Ausdrücke.

Wie MySQL, PostgreSQL 8.0 und frühere Versionen in ihren Dokumenten zu Indizes :

Mit PostgreSQL 8.1 hat sich dies geändert .

Wenn dies jedoch nicht hilft, können Sie die UNION verwenden Lösung, die Sie versucht haben (dies ist eine gängige Lösung für MySQL-Benutzer, die weiterhin eine Beschränkung auf einen Index pro Tabelle hat).

Sie sollten die Ergebnisse einer UNION bestellen können Abfrage, aber Sie müssen Klammern verwenden, um anzugeben, dass ORDER BY gilt für das Ergebnis der UNION , nicht nur bis zur letzten Unterabfrage in der Kette.

(SELECT ... )
UNION
(SELECT ... )
UNION
(SELECT ... )
ORDER BY columnname;

Ich hoffe das hilft; Ich bin kein Experte für den PostgreSQL-Optimierer. Sie können versuchen, die Mailinglistenarchive zu durchsuchen , oder fragen Sie im IRC-Kanal nach .