ORDER BY
andLIMIT
句を含むかなり複雑なクエリがあります。が主キーを使用する場合ORDER BY
、クエリにかかる時間は 5 ミリ秒未満です。ORDER BY
ただし、別の列 (タイプ ) によって実行されるようにクエリを変更するFLOAT
と、応答時間は 50 秒を超えます (4 桁も高くなります!)。
さて、問題は、主キーで並べ替えられたクエリがインデックス スキャンを実行するのに対し、float 列で並べ替えられたクエリは順次スキャンを実行し、最後に並べ替えが必要になることだと思います。
float 列にインデックスを追加するだけで、Postgresql がこのクエリをよりスマートな方法で計画するのに十分だと思いました。どうやら私が間違っていたようです。何を見逃したのでしょうか?
編集:EXPLAIN ANALYZE
質問を投稿する前に実行しました。したがって、私の推測は単なる推測ではありません。ただし、 の出力はEXPLAIN ANALYZE
30 行を超えて実行されるため、1 つのクエリがインデックスを使用し、もう 1 つのクエリがすべての行を並べ替えなければならない理由はすぐにはわかりません。