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

Langsame Abfrage in der UNION ALL-Ansicht

Hier scheint ein Pilotenfehler vorzuliegen. Der "v"-Abfrageplan wählt aus mindestens 5 verschiedenen Tabellen aus.

Sind Sie sicher, dass Sie mit der richtigen Datenbank verbunden sind? Vielleicht gibt es einige funky search_path-Einstellungen? Vielleicht sind t1 und t2 tatsächlich Ansichten (möglicherweise in einem anderen Schema)? Vielleicht wählst Du irgendwie aus der falschen Ansicht?

Nach Klärung bearbeitet:

Sie verwenden eine ziemlich neue Funktion namens "Join-Entfernung":http:// wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.0#Join_Removal

http://rhaas.blogspot.com/2010 /06/warum-mitmachen-entfernen-ist-cool.html

Es scheint, dass die Funktion nicht aktiviert wird, wenn union all beteiligt ist. Wahrscheinlich müssen Sie die Ansicht neu schreiben, indem Sie nur die erforderlichen zwei Tabellen verwenden.

eine weitere Bearbeitung:Sie scheinen ein Aggregat zu verwenden (wie "select count (*) from v" vs. "select * from v"), das angesichts der Entfernung von Joins sehr unterschiedliche Pläne haben könnte. Ich schätze, wir werden nicht sehr weit kommen, ohne dass Sie die tatsächlichen Abfragen, Ansichts- und Tabellendefinitionen und verwendeten Pläne posten ...