Добре, тествах това върху 30 000+ записа на таблица и работи доста бързо.
Както е в момента, в момента извършвате обединяване на две масивни маси, но ако първо сканирате за съвпадения на „val“ на всяка маса, това значително ще намали размера на вашите набори за присъединяване.
Първоначално публикувах този отговор като набор от подзаявки, но не осъзнах, че MySQL е болезнено бавен при вложени подзаявки, тъй като се изпълнява отвън навътре. Ако обаче дефинирате подзаявките като изгледи, той ги изпълнява отвътре навън.
Така че, първо създайте изгледите.
CREATE VIEW tbl1_iii AS (
SELECT * FROM tbl1 WHERE val='iii'
);
CREATE VIEW tbl2_iii AS (
SELECT * FROM tbl2 WHERE val='iii'
);
След това стартирайте заявката.
SELECT tbl1_iii.id from tbl1_iii,tbl2_iii
WHERE tbl1_iii.id = tbl2_iii.id;
Светкавица.