クエリ内にネストされたクエリで奇妙な動作が発生していIN
ます。実行に予想外に時間がかかっています。デバッグのためにクエリを最小限に単純化しました。
SQLは次のとおりです。
select * from test_table where id in (
select 1
)
そして、EXPLAIN ANALYZE
は
"Hash Semi Join (cost=0.03..0.07 rows=1 width=2198) (actual time=0.615..10297.491 rows=1 loops=1)"
" Hash Cond: (test_table.id = (1))"
" -> Data Node Scan on test_table "_REMOTE_TABLE_QUERY_" (cost=0.00..0.00 rows=1000 width=2198) (actual time=0.593..7494.668 rows=3008167 loops=1)"
" Node/s: datanode"
" -> Hash (cost=0.02..0.02 rows=1 width=4) (actual time=0.006..0.006 rows=1 loops=1)"
" Buckets: 1024 Batches: 1 Memory Usage: 1kB"
" -> Result (cost=0.00..0.01 rows=1 width=0) (actual time=0.001..0.001 rows=1 loops=1)"
"Total runtime: 10628.786 ms"
ネストされたクエリとして使用しselect 1
ていて、1 しか返されないため、SQL を次のように変更しています。
select * from test_table where id in (
1 -- NO SELECT
)
そして、EXPLAIN ANALYZE
は
"Data Node Scan on "__REMOTE_FQS_QUERY__" (cost=0.00..0.00 rows=0 width=0) (actual time=1.109..1.112 rows=1 loops=1)"
" Node/s: datanode"
"Total runtime: 1.152 ms"
ここで私の質問は、なぜここで時差が大きいのですか? そして、ここでの状況を改善するにはどうすればよいですか? 私のpsqlバージョンは9.3.1