私は単純な選択クエリを持っています:
SELECT * FROM entities WHERE entity_type_id = 1 ORDER BY entity_id
次に、最初の 100 件の結果を取得したいので、これを使用します。
SELECT * FROM entities WHERE entity_type_id = 1 ORDER BY entity_id LIMIT 100
問題は、2 番目のクエリが最初のクエリよりもはるかに遅く動作することです。最初のクエリを実行するのに 1 秒もかからず、2 番目のクエリを実行するのに 1 分以上かかります。
これらは、クエリの実行計画です。
制限なし:
Sort (cost=26201.43..26231.42 rows=11994 width=72)
Sort Key: entity_id
-> Index Scan using entity_type_id_idx on entities (cost=0.00..24895.34 rows=11994 width=72)
Index Cond: (entity_type_id = 1)
制限あり:
Limit (cost=0.00..8134.39 rows=100 width=72)
-> Index Scan using xpkentities on entities (cost=0.00..975638.85 rows=11994 width=72)
Filter: (entity_type_id = 1)
なぜこれら 2 つのプランがそれほど異なるのか、なぜパフォーマンスが大幅に低下するのかがわかりません。2 番目のクエリをより高速に動作させるには、どのように調整すればよいですか?
PostgreSql 9.2 を使用しています。