функции от двух полей таблицы
"transactions_2_work_doc_days_diff_idx" btree (work_doc_days_diff(trans_date, doc_date)) WHERE trans_date <> doc_date
и делаю запрос с дистинктом по нему
explain select distinct work_doc_days_diff(trans_date, doc_date) from transactions_2 where trans_date <> doc_date;
но он не используется почему-то, а заново по этим полям все считается
HashAggregate (cost=819643.56..819889.26 rows=945 width=4)
Group Key: work_doc_days_diff(trans_date, doc_date)
-> Index Only Scan using transactions_2_trans_date_doc_date_idx on transactions_2 (cost=0.43..812140.97 rows=3001033 width=4)
Filter: (trans_date <> doc_date)
почему так?
Привет Так а какие условия именно для индекса?
На планировщик много чего может влиять. Например, ANALYZE не отработал (это не то же, что VACUUM). Или селективность заведомо хуже, чем у прочих способов (84% -- это когда индекс вообще не нужен). Или функция "стоит" столько (COST), что Постгрес её хочет/не хочет вызывать.
Обсуждают сегодня