Necesito implementar una funcionalidad que esté en línea con la funcionalidad GEQO de PostgreSQL. Entiendo que el enfoque de GEQO es codificar los planes de consulta como cadenas enteras y GEQO genera estas posibles secuencias de unión al azar. Fuente: http://www.postgresql.org/docs/9.3/static/geqo-pg-intro.html
Mi pregunta: cómo modificar la función GEQO si conozco definitivamente la secuencia de unión correcta, para no tener que buscar diferentes secuencias de unión. Por ejemplo, si supiera que la mejor manera de unir las 4 relaciones es 4-1-3-2, no necesitaría verificar otras permutaciones.
No hay buenos materiales sobre cómo se implementa GEQO en PostgreSQL. PostgreSQL solo ofrece una vista general de la funcionalidad GEQO pero no explica mucho.
¿O podría lograr esta funcionalidad en standard_join_search () sin usar GEQO?
fuente
Respuestas:
Una forma de hacerlo sin la necesidad de perder el tiempo con GEKO es mediante el uso de CTE.
Los CTE son barreras de optimización, por lo tanto, podría envolver las uniones dentro de los CTE en el orden que desee y PG se verá obligado a hacerlo.
Por ejemplo, si queremos forzar al DB a unir primero t1 con t2 y solo entonces con t4 podríamos ejecutar algo como:
Esto resultará en:
Este es solo un ejemplo, puede cambiarlo según sea necesario; en cualquier caso, PG no puede cambiar el orden entre los diferentes CTE.
Espero eso ayude :)
fuente