Erwin: Saya setuju dengan gagasan bahwa MENGGUNAKAN yang menyebabkan pemesanan yang kaku dapat membuat banyak kasus tepi di mana rencana optimal akan dikesampingkan. Saya baru-baru ini membantu seseorang yang memiliki sesuatu seperti ini dalam permintaannya:
LEFT JOIN (
a
JOIN b ON a.id = b.a_id
JOIN c ON b.c_id = c.id
) ON a.id = something.a_id
LEFT JOIN (
table1 t1
JOIN table2 t2 ON t1.some_field = t2.other_field
JOIN talbe3 t3 ON t2.yafield = t3.something_else
) ON ....
repeat a few more times
Dalam kasusnya yang terburuk dari blok gabungan ini menyebabkan loop bersarang melalui sekitar 200 ribu baris, sekitar 20 ribu kali (lakukan perhitungan), dan karena kunci tidak dapat ditekan ke indeks, itu adalah pemindaian berurutan. Ini berarti bahwa keseluruhan permintaan memakan waktu sekitar 3 jam untuk dijalankan karena perubahan rencana cascading. Dengan mendistribusikan gabungan kiri, tombol dapat ditekan ke bawah dan kueri berjalan dalam hitungan detik. Tentu saja ini tidak persis sama, itulah sebabnya perencana itu tidak dapat memperlakukan mereka sebagai setara sehingga dibiarkan mencari tahu rencana itu sebagai hash bergabung dan kemudian melakukan loop bersarang di, yang sangat lambat.
Setiap kali Anda secara kaku memaksa sambungan untuk melewati dalam urutan tertentu Anda memperkenalkan kasus-kasus di mana informasi filter utama mungkin belum tersedia dalam pelaksanaan rencana, dan apa yang mungkin dilakukan kemudian dalam pemindaian indeks cepat / hash bergabung mungkin harus dilakukan jauh lebih lambat dalam loop berulang / sekuensial pemindaian dan jadi sementara fragmen di atas tidak langsung setara, itu menunjukkan masalah yang sama.
USING
sedikit lebih cepat - karena menghasilkan satu kolom kurang dalam matriks hasil. Temuan Anda berasal dari tahun 2005 dan 2008. Saya berasumsi masalah apa pun telah diperbaiki sekarang. Namun , saya dapat melihat batasan yang mungkin: BERGABUNG denganUSING
mungkin harus diterapkan secara berurutan , karena kolom gabungan yang dihasilkan adalah produk bersama. Dengan demikian berpotensi membatasi opsi dalam menata ulang GABUNG.