Oke, saya telah menguji ini pada 30.000+ catatan per tabel dan ini berjalan sangat cepat.
Seperti yang ada saat ini, Anda melakukan penggabungan pada dua tabel besar saat ini, tetapi jika Anda memindai kecocokan pada 'val' di setiap tabel terlebih dahulu, itu akan mengurangi ukuran kumpulan gabungan Anda secara substansial.
Saya awalnya memposting jawaban ini sebagai satu set subkueri tetapi saya tidak menyadari bahwa MySQL sangat lambat pada subkueri bersarang karena dijalankan dari luar ke dalam. Namun jika Anda mendefinisikan subkueri sebagai tampilan, ia menjalankannya dari dalam ke luar.
Jadi, buat dulu tampilannya.
CREATE VIEW tbl1_iii AS (
SELECT * FROM tbl1 WHERE val='iii'
);
CREATE VIEW tbl2_iii AS (
SELECT * FROM tbl2 WHERE val='iii'
);
Kemudian jalankan kueri.
SELECT tbl1_iii.id from tbl1_iii,tbl2_iii
WHERE tbl1_iii.id = tbl2_iii.id;
Petir.