LEFT JOINした時は片方のテーブルがSeq Scanになるのか??
公開日:
:
最終更新日:2013/11/11
SQL
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
QUERY PLAN
Limit (cost=962.33..3137.59 rows=10 width=64) (actual time=2622.341..2622.851 rows=10 loops=1)
-> Unique (cost=962.33..44467.66 rows=200 width=64) (actual time=2622.340..2622.850 rows=10 loops=1)
-> Merge Left Join (cost=962.33..42038.45 rows=971685 width=64) (actual time=2622.338..2622.835 rows=10 loops=1)
Merge Cond: (xxx.path = xxx.path)
Filter: (xxx.path IS NULL)
-> Index Scan using xxx on xxx (cost=0.00..11773.97 rows=60645 width=64) (actual time=0.093..62.604 rows=6266 loops=1)
-> Sort (cost=962.33..978.35 rows=6409 width=32) (actual time=2458.486..2462.483 rows=6257 loops=1)
Sort Key: xxx.path
-> Seq Scan on xxx (cost=0.00..557.09 rows=6409 width=32) (actual time=0.020..13.958 rows=23420 loops=1)
Total runtime: 2693.484 ms
(10 rows)
両方のテーブルのpathには
“index_xxx_on_path” btree (path)
こんな感じでインデックスを作成しているのだけど。
TODO
- PostgreSQLにおけるLEFT JOINの実装について調べる
追記
レコード件数によって両方Index Scanになったり両方Seq Scanになったりしているので、どうもPostgresのオプティマイザが最適な実行プランをその都度判断しているっぽい。
関連記事
- PREV
- Railsのid生成について調べる
- NEXT
- Linuxカーネルについて詳しくなりたい