Целочисленный индекс Postgresql не используется для значения 1 - PullRequest
0 голосов
/ 11 января 2019

У меня составной индекс по целому числу и столбцу даты. При анализе запроса индекс используется для значений больше 1. Но при сравнении со значением 1 индекс не используется.

Также при использовании отрицательного значения Postgres использует Растровое сканирование кучи .

Результаты выглядят следующим образом:

Индекс используется

explain analyze select * from journal where status = 2 and deletedat is null;

Index Scan using journal_status_idx on journal  (cost=0.28..25.03 rows=9 width=1333) (actual time=0.008..0.008 rows=0 loops=1)
   Index Cond: ((status = 2) AND (deletedat IS NULL))
 Planning time: 0.153 ms
 Execution time: 0.052 ms

Индекс не используется

explain analyze select * from journal where status = 1 and deletedat is null;

Seq Scan on journal  (cost=0.00..154.71 rows=1957 width=1333) (actual time=0.012..2.654 rows=2034 loops=1)
   Filter: ((deletedat IS NULL) AND (status = 1))
   Rows Removed by Filter: 743
 Planning time: 0.125 ms
 Execution time: 4.714 ms

Растровое сканирование кучи

explain analyze select * from journal where status = -1 and deletedat is null;

Bitmap Heap Scan on journal  (cost=5.72..133.52 rows=140 width=1333) (actual time=0.100..0.299 rows=146 loops=1)
   Recheck Cond: ((status = '-1'::integer) AND (deletedat IS NULL))
   Heap Blocks: exact=49
   ->  Bitmap Index Scan on journal_status_idx  (cost=0.00..5.68 rows=140 width=0) (actual time=0.075..0.075 rows=146 loops=1)
         Index Cond: ((status = '-1'::integer) AND (deletedat IS NULL))
 Planning time: 0.000 ms
 Execution time: 1.291 ms

У кого-нибудь есть идеи?

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