Memfilter gabungan hanya menggunakan WHERE
bisa sangat tidak efisien dalam beberapa skenario umum. Misalnya:
SELECT * FROM people p, companies c
WHERE p.companyID = c.id AND p.firstName = 'Daniel'
Sebagian besar basis data akan menjalankan kueri ini secara harfiah, pertama-tama gunakan produk Cartesian
dari people
dan companies
tabel dan lalu pemfilteran oleh mereka yang memiliki companyID
yang cocok dan id
bidang. Sementara produk yang sepenuhnya tidak dibatasi tidak ada di mana pun kecuali dalam memori dan hanya sesaat, perhitungannya membutuhkan waktu.
Pendekatan yang lebih baik adalah mengelompokkan batasan dengan JOIN
s jika relevan. Ini tidak hanya secara subjektif lebih mudah dibaca tetapi juga jauh lebih efisien. Jadi:
SELECT * FROM people p JOIN companies c ON p.companyID = c.id
WHERE p.firstName = 'Daniel'
Ini sedikit lebih lama, tetapi database dapat melihat ON
klausa dan menggunakannya untuk menghitung JOIN
. yang dibatasi sepenuhnya langsung, daripada memulai dengan semuanya dan kemudian membatasi. Ini lebih cepat untuk dihitung (terutama dengan kumpulan data besar dan/atau gabungan banyak tabel) dan membutuhkan lebih sedikit memori.
Saya mengubah setiap kueri yang saya lihat yang menggunakan "koma JOIN
" sintaks. Menurut pendapat saya, satu-satunya tujuan keberadaannya adalah keringkasan. Mempertimbangkan dampak kinerja, saya rasa ini bukan alasan yang kuat.