半日以上悩んだので備忘録です。こんなテーブル(table01)があったとします。 | id | hoge_id | indexは両カラムに個別に貼ってあります。そしてこんなSQLを発行します。SELECT * FROM table01 WHERE hoge_id=001 ORDER BY id limit 10; この場合、 個別にid と hoge_id にINDEXが貼ってあっても、スロークエリとなってしまいました。 ところがLIMITをはずすと高速でした。SELECT * FROM table01 WHERE hoge_id=001 ORDER BY id ; こちらの「漢のコンピューター道」さんが大変参考になりました。MySQLだけでなく、PostgreSQLでも同様のことが起こるようです。最終的にCREATE INDEX idx_hogeid_id ON table01 ( hoge_id, id );と複合INDEXを貼ることで解決しました。Where文とORDERのカラムが違う場合、そしてLIMITが付く場合は要注意ですね。