У меня есть такой индекс для моих кандидатов и их столбец с именем:
CREATE INDEX ix_public_candidates_first_name_not_null
ON public.candidates (first_name)
WHERE first_name IS NOT NULL;
Достаточно ли умен Postgres, чтобы знать, что оператор равенства означает, что он не может быть нулевым, или мне просто повезло, что мой индекс "не равен нулю" используется в этом запросе?
выберите *
от public.candidates
где first_name = 'Эрик'
Анализировать вывод:
Bitmap Heap Scan on candidates (cost=57.46..8096.88 rows=2714 width=352) (actual time=1.481..18.847 rows=2460 loops=1)
Recheck Cond: (first_name = 'Erik'::citext)
Heap Blocks: exact=2256
-> Bitmap Index Scan on ix_public_candidates_first_name_not_null (cost=0.00..56.78 rows=2714 width=0) (actual time=1.204..1.204 rows=2460 loops=1)
Index Cond: (first_name = 'Erik'::citext)
Planning time: 0.785 ms
Execution time: 19.340 ms