Preciso implementar uma funcionalidade que esteja alinhada com a funcionalidade GEQO do PostgreSQL. Entendo que a abordagem do GEQO é codificar planos de consulta como seqüências de caracteres inteiras e o GEQO gera essas possíveis sequências de junção aleatoriamente. Fonte: http://www.postgresql.org/docs/9.3/static/geqo-pg-intro.html
Minha pergunta: como modificar a função GEQO se eu souber definitivamente a sequência de junção correta, para que eu não precise pesquisar diferentes sequências de junção. Por exemplo, se eu sabia que a melhor maneira de ingressar nas 4 relações é 4-1-3-2, não preciso verificar outras permutações.
Não existem bons materiais sobre como o GEQO é implementado no PostgreSQL. O PostgreSQL fornece apenas uma visão geral da funcionalidade do GEQO, mas não explica muito.
Ou eu poderia conseguir essa funcionalidade no próprio standard_join_search () sem usar o GEQO?
fonte
Respostas:
Uma maneira de fazer isso sem a necessidade de mexer com o GEKO é usando o CTE.
CTE são barreiras de otimização, portanto, você pode agrupar as junções dentro de CTEs na ordem que desejar e o PG será forçado a fazê-lo.
Por exemplo, se queremos forçar o banco de dados a ingressar primeiro em t1 com t2 e somente depois em t4, podemos executar algo como:
Isso resultará em:
Este é apenas um exemplo, você pode alterá-lo conforme necessário - em qualquer caso, o PG não pode alterar a ordem entre os diferentes CTEs.
Espero que ajude :)
fonte