Ik heb de volgende (versimpelde) query:
Die query duurt vrij lang, dus hop, een EXPLAIN ervoor gezet. Daarbij zie ik dat de primary key address_id (in de tabel data_address) niet gebruikt wordt.
Pas ik de query aan:
Dan wordt mijn query ± 90% sneller en wordt de PK wél gebruikt.
Blijkbaar zit het verschil er dus in dat ik de tabel benoem in mijn ON clause. Nu is mijn probleem an sich dus opgelost, maar ik vraag me hoe dit verschil te verklaren is gezien de werking van MySQL. Immers: data_address is de enige tabel met een kolom address_id en data_order is de enige tabel met een kolom address_id_shipping. (logisch, anders zou de query ook falen).
Wie verlicht mij?
SQL:
1
2
3
4
5
6
7
8
| SELECT [...] FROM data_order_rule JOIN data_order USING(order_id) JOIN data_user USING(user_id) JOIN data_address ON address_id = address_id_shipping WHERE [...] |
Die query duurt vrij lang, dus hop, een EXPLAIN ervoor gezet. Daarbij zie ik dat de primary key address_id (in de tabel data_address) niet gebruikt wordt.
Pas ik de query aan:
SQL:
1
2
3
4
5
6
7
8
| SELECT [...] FROM data_order_rule JOIN data_order USING(order_id) JOIN data_user USING(user_id) JOIN data_address ON data_address.address_id = data_order.address_id_shipping WHERE [...] |
Dan wordt mijn query ± 90% sneller en wordt de PK wél gebruikt.
Blijkbaar zit het verschil er dus in dat ik de tabel benoem in mijn ON clause. Nu is mijn probleem an sich dus opgelost, maar ik vraag me hoe dit verschil te verklaren is gezien de werking van MySQL. Immers: data_address is de enige tabel met een kolom address_id en data_order is de enige tabel met een kolom address_id_shipping. (logisch, anders zou de query ook falen).
Wie verlicht mij?
Tjolk is lekker. overal en altijd.