Ich muss eine Funktionalität implementieren, die der GEQO-Funktionalität von PostgreSQL entspricht. Ich verstehe, dass der GEQO-Ansatz darin besteht, Abfragepläne als Ganzzahlzeichenfolgen zu codieren, und GEQO generiert diese möglichen Verknüpfungssequenzen nach dem Zufallsprinzip. Quelle: http://www.postgresql.org/docs/9.3/static/geqo-pg-intro.html
Meine Frage: Wie ändere ich die GEQO-Funktion, wenn ich die richtige Verknüpfungssequenz definitiv kenne, damit ich nicht nach verschiedenen Verknüpfungssequenzen suchen muss? Wenn ich zum Beispiel wüsste, dass der beste Weg, die 4 Relationen zu verbinden, 4-1-3-2 ist, muss ich nicht nach anderen Permutationen suchen.
Es gibt keine guten Materialien zur Implementierung von GEQO in PostgreSQL. PostgreSQL gibt nur einen Überblick über die GEQO-Funktionalität, erklärt aber nicht viel.
Oder könnte ich diese Funktionalität in der standard_join_search () selbst erreichen, ohne GEQO zu verwenden?
quelle
Antworten:
Eine Möglichkeit, dies zu tun, ohne sich mit GEKO herumschlagen zu müssen, ist die Verwendung von CTE.
CTE sind Optimierungsbarrieren, daher können Sie die Joins in CTEs in der von Ihnen gewünschten Reihenfolge einbinden, und PG wird dazu gezwungen.
Wenn wir zum Beispiel den DB zwingen wollen, zuerst t1 mit t2 zu verbinden und erst dann mit t4 könnten wir so etwas ausführen:
Dies führt zu:
Dies ist nur ein Beispiel, Sie können es nach Bedarf ändern. In jedem Fall kann PG die Reihenfolge zwischen den verschiedenen CTEs nicht ändern.
Ich hoffe es hilft :)
quelle