OK, jeg har testet dette på 30.000+ poster pr. bord, og det kører ret hurtigt.
Som det ser ud i øjeblikket udfører du en join på to massive borde i øjeblikket, men hvis du først scanner efter match på 'val' på hvert bord, vil det reducere størrelsen af dine join-sæt betydeligt.
Jeg postede oprindeligt dette svar som et sæt underforespørgsler, men jeg var ikke klar over, at MySQL er smerteligt langsom ved indlejrede underforespørgsler, da det udføres udefra og ind. Men hvis du definerer underforespørgslerne som visninger, kører det dem indefra og ud.
Så opret først visningerne.
CREATE VIEW tbl1_iii AS (
SELECT * FROM tbl1 WHERE val='iii'
);
CREATE VIEW tbl2_iii AS (
SELECT * FROM tbl2 WHERE val='iii'
);
Kør derefter forespørgslen.
SELECT tbl1_iii.id from tbl1_iii,tbl2_iii
WHERE tbl1_iii.id = tbl2_iii.id;
Lyn.