Postgres сложность в фильтре - PullRequest
0 голосов
/ 06 марта 2020

У меня такой запрос:

SELECT var_2 
FROM table_a 
WHERE var_1 IN (<Large list of values>);

Допустим, таблица_a имеет n строк, а большой список значений имеет длину t, что меньше n. Какова тогда сложность этого запроса? O(n), O(n*log(t)) or O(n*t) Я использую postgres 10.

1 Ответ

1 голос
/ 06 марта 2020

Иногда, переписывая большой список IN в JOIN против списка VALUES, создает лучший план выполнения.

Итак, запрос наподобие этого:

select column_2
from the_table
where column_1 in (1,2,3,4);

Если список не содержит повторяющихся значений , вышеприведенное можно переписать так:

select t.column_2
from the_table t
  join ( 
    values (1),(2),(3),(4)
  ) as v(c1) on v.c1 = t.column_1

Чтобы узнать, , если , который улучшает запрос, вам нужно будет проверить план выполнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...