Странное поведение IN-запроса

Я испытываю странное поведение с вложенным запросом внутри 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

0 ответов

Другие вопросы по тегам