isXXX, ... FROM l LEFT JOIN (SELECT ... FROM h) INNER JOIN u ON l.uid=u.uid INNER JOIN ... ORDER BY isXXX DESC, ... LIMIT 100 ORDER BY している isXXX はJOIN後の演算結果によって決まるbool値 false のものを下に落としたかったためらしい… INDEXは使えないため l テーブルをフルスキャンする実行計画に 100行しか必要ないのに2000行程度をスキャンしていた