OK, testoval jsem to na více než 30 000 záznamech na tabulku a běží to zatraceně rychle.
V současné době provádíte spojení na dvou masivních stolech, ale pokud nejprve vyhledáte shody na 'val' na každém stole, podstatně snížíte velikost vašich sad spojení.
Původně jsem tuto odpověď zveřejnil jako sadu poddotazů, ale neuvědomil jsem si, že MySQL je u vnořených poddotazů bolestně pomalé, protože se spouští zvenčí dovnitř. Pokud však definujete poddotazy jako pohledy, spustí je zevnitř ven.
Nejprve tedy vytvořte pohledy.
CREATE VIEW tbl1_iii AS (
SELECT * FROM tbl1 WHERE val='iii'
);
CREATE VIEW tbl2_iii AS (
SELECT * FROM tbl2 WHERE val='iii'
);
Poté spusťte dotaz.
SELECT tbl1_iii.id from tbl1_iii,tbl2_iii
WHERE tbl1_iii.id = tbl2_iii.id;
Blesk.