インデックス付きの単語テーブル(language_id、state)があります。ここでANALYZE EXPLAINの結果は次のとおりです。ポストグラムでLIMITが使用されている場合はインデックスが使用されません
制限なし
explain analyze SELECT "words".* FROM "words" WHERE (words.language_id = 27) AND (state IS NULL);
Bitmap Heap Scan on words (cost=10800.38..134324.10 rows=441257 width=96) (actual time=233.257..416.026 rows=540556 loops=1)
Recheck Cond: ((language_id = 27) AND (state IS NULL))
-> Bitmap Index Scan on ls (cost=0.00..10690.07 rows=441257 width=0) (actual time=230.849..230.849 rows=540556 loops=1)
Index Cond: ((language_id = 27) AND (state IS NULL))
Total runtime: 460.277 ms
(5 rows)
リミット100は
explain analyze SELECT "words".* FROM "words" WHERE (words.language_id = 27) AND (state IS NULL) LIMIT 100;
Limit (cost=0.00..51.66 rows=100 width=96) (actual time=0.081..0.184 rows=100 loops=1)
-> Seq Scan on words (cost=0.00..227935.59 rows=441257 width=96) (actual time=0.080..0.160 rows=100 loops=1)
Filter: ((state IS NULL) AND (language_id = 27))
Total runtime: 0.240 ms
(4 rows)
なぜこの出来事はありますか?すべてのケースでインデックスを使用するにはどうすればよいですか?
ありがとうございました。
ORDER BYのないLIMITは、制限された(意図しない)値のようです。どの100行が返されますか? –
BTW:language_id = 17 AND status IS NULL句の選択性は何ですか?単語表の合計サイズは? – wildplasser
true ...注文はID DESCで発生します。それはそれを遅くすることができますか?その列にインデックスが必要ですか? @wildplasserの合計サイズは1000万行、選択率は約500,000行です – alste