この計画:
Index Scan using Designation_place_name on myTable (cost=0.00..67701.36 rows=22043 width=27) (actual time=0.061..3.796 rows=3376 loops=1)
Index Cond: ((relation)::text = 'Manager'::text)
Filter: (timeOfJoining > '1930-10-10 00:00:00+05:53:20'::timestamp with time zone)
Total runtime: 4.082 ms
(4 rows)
基本的には:
- Designation_place_nameインデックスの使用
- インデックス条件の関係に適合する行を見つける='Manager'
- timeOfJoining基準に一致する行のみを保持します
ステップ2では、ディスクページは順番にではなく「ランダムに」アクセスされます。つまり、インデックスにはディスク上の一致する行のアドレスが含まれ、Postgresはインデックスで示された順序でこれらのアドレスにアクセスします。 (これはコストがかかる可能性があります。ところで、プランナーは、テーブル全体を読み取る(seqスキャン)か、インデックスで示される順序を無視してページ上のすべての行をバッチフェッチする(ビットマップインデックススキャン)方が安いと判断する場合があります。)
注:そのクエリには(テーブル)結合はありません。 1つあれば、余分なインデントレベルが表示されます。最もインデントされているものから最もインデントされていないものまで読んでください。