NOT IN ( SELECT ... )
特に古いバージョンでは、最適化が非常に不十分です。
これに変更:
SELECT abc.*
FROM abc
LEFT JOIN zyx ON zyx.abc_id = abc.id
WHERE zyx.abc_id IS NULL;
AND zyx.id = 12345 ;
zyxの場合は、INDEX(id, abc_id)
のいずれかを使用します またはINDEX(abc_id, id)
zyx.id
の場合 PRIMARY KEY
です 、クエリはあまり意味がありません-なぜ単一行(12345)をテストするのですか?