Pemula postgres di sini.
Saya ingin tahu apakah kueri ini dioptimalkan atau tidak? Saya mencoba untuk BERGABUNG PADA hanya nilai-nilai yang diperlukan 100% dan meninggalkan semua kondisi dinamis dalam klausa WHERE. Lihat di bawah.
SELECT *
FROM
myapp_employees
JOIN myapp_users ON
myapp_users.user_id=myapp_employees.user_id
JOIN myapp_contacts_assoc ON
myapp_contacts_assoc.user_id=myapp_users.user_id
JOIN myapp_contacts ON
myapp_contacts.contact_id=myapp_contacts_assoc.contact_id
WHERE
myapp_contacts.value='test@gmail.com' AND
myapp_contacts.type=(1)::INT2 AND
myapp_contacts.is_primary=(1)::INT2 AND
myapp_contacts.expired_at IS NULL AND
myapp_employees.status=(1)::INT2 AND
myapp_users.status=(1)::INT2
LIMIT 1;
Catatan: Untuk konteks, proc ini memeriksa untuk melihat apakah pengguna juga seorang karyawan (privs tinggi / tipe pengguna berbeda).
Ngomong-ngomong, apakah ini cara yang benar untuk pergi? Haruskah BERGABUNG DENGAN berisi lebih banyak pernyataan seperti memeriksa untuk expired_at IS NULL, misalnya? Mengapa atau mengapa ini tidak masuk akal?
SELECT version();
)