ホーム > フラッグblog > PostgreSQLでlimitをつけると遅くなる
Date 2014/01/31   

PostgreSQLでlimitをつけると遅くなる

半日以上悩んだので忘備録です。


こんなテーブル(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が付く場合は要注意ですね。

この記事をシェアする

TOP

Flagsystem