Muszę wdrożyć funkcjonalność zgodną z funkcjonalnością GEQO PostgreSQL. Rozumiem, że podejście GEQO polega na kodowaniu planów zapytań jako ciągów liczb całkowitych, a GEQO generuje te możliwe sekwencje łączenia losowo. Źródło: http://www.postgresql.org/docs/9.3/static/geqo-pg-intro.html
Moje pytanie: jak zmodyfikować funkcję GEQO, jeśli definitywnie znam właściwą sekwencję łączenia, aby nie musiałem wyszukiwać różnych sekwencji łączenia. Na przykład, gdybym wiedział, że najlepszym sposobem na połączenie 4 relacji jest 4-1-3-2, nie muszę sprawdzać innych permutacji.
Nie ma żadnych dobrych materiałów na temat implementacji GEQO w PostgreSQL. PostgreSQL daje jedynie ogólny obraz funkcjonalności GEQO, ale niewiele wyjaśnia.
Czy mogę osiągnąć tę funkcjonalność w samym standardzie_join_search () bez korzystania z GEQO?
źródło
Odpowiedzi:
Jednym ze sposobów, w jaki możesz to zrobić bez potrzeby manipulowania GEKO, jest użycie CTE.
CTE to bariery optymalizacyjne, dlatego można łączyć połączenia wewnątrz CTE w żądanej kolejności, a PG będzie zmuszony to zrobić.
Na przykład, jeśli chcemy zmusić DB do pierwszego połączenia t1 z t2, a dopiero potem z t4 możemy uruchomić coś takiego:
Spowoduje to:
To tylko przykład, możesz go zmienić w razie potrzeby - w każdym razie PG nie może zmienić kolejności między różnymi CTE.
Mam nadzieję, że to pomoże :)
źródło