Saya perlu mengimplementasikan fungsionalitas yang sejalan dengan fungsionalitas GEQO dari PostgreSQL. Saya mengerti bahwa pendekatan GEQO adalah untuk menyandikan rencana kueri sebagai string integer dan GEQO menghasilkan urutan gabungan yang mungkin ini secara acak. Sumber: http://www.postgresql.org/docs/9.3/static/geqo-pg-intro.html
Pertanyaan saya: bagaimana cara memodifikasi fungsi GEQO jika saya secara pasti mengetahui urutan bergabung yang benar, sehingga saya tidak perlu mencari urutan bergabung yang berbeda. Sebagai contoh, jika saya tahu bahwa cara terbaik untuk bergabung dengan 4 relasi adalah 4-1-3-2, saya tidak perlu memeriksa permutasi lainnya.
Tidak ada bahan yang bagus tentang bagaimana GEQO diimplementasikan di PostgreSQL. PostgreSQL hanya memberikan tampilan keseluruhan dari fungsi GEQO tetapi tidak banyak menjelaskan.
Atau bisakah saya mencapai fungsionalitas ini di standard_join_search () itu sendiri tanpa menggunakan GEQO?
sumber
Jawaban:
Salah satu cara Anda dapat melakukan ini tanpa perlu dipusingkan dengan GEKO adalah dengan menggunakan CTE.
CTE adalah hambatan optimisasi, maka Anda dapat membungkus gabungan di dalam CTE dalam urutan yang Anda inginkan dan PG akan dipaksa untuk melakukannya.
Sebagai contoh jika kita ingin memaksa DB untuk pertama kali bergabung dengan t1 dengan t2 dan hanya dengan t4 kita dapat menjalankan sesuatu seperti:
Ini akan menghasilkan:
Ini hanyalah sebuah contoh, Anda dapat mengubahnya sesuai kebutuhan - dalam hal apa pun PG tidak dapat mengubah urutan antara CTE yang berbeda.
Semoga bermanfaat :)
sumber