С такими тремя индексами сложность для запроса, использующего индексы, будет O (n) , потому что единственный способ объединить несколько индексов - это битовая карта и . Создание растрового изображения требует чтения всего индекса, который равен O (n) .
Итак, если только одно из условий не является очень избирательным, я бы предположил, что PostgreSQL выберет регулярное сканирование индекса по наиболее селективному из индексов и использует другие условия в качестве фильтра. Сложность такого запроса пропорциональна проценту строк, которые соответствуют условию индекса (скажем, O (1) , если существует только постоянное количество строк с user_id = 1
независимо от размера таблицы) .
Идеальными индексами для этих запросов являются:
CREATE INDEX ON user_tran (transaction_id, time_stamp);
CREATE INDEX ON user_tran (user_id, time_stamp);