Почему PostgreSQL не объединяет два индекса в этом примере? - PullRequest
0 голосов
/ 09 мая 2018

Я создаю снимок книги заказов из "событий книги заказов". Суть задачи демонстрируется на следующем примере:

CREATE TABLE t AS SELECT i.event_id, 10000*(round(i.event_id/10000,0)+1) AS last_event_id  FROM ( SELECT * FROM generate_series(1,1000000) AS event_id ) i;

ALTER TABLE t ADD PRIMARY KEY (event_id);

CREATE INDEX t_idx ON t USING btree  (last_event_id ASC NULLS LAST);

EXPLAIN ANALYZE SELECT * FROM T WHERE event_id <= 80001 and last_event_id >= 80001;

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

                                                QUERY PLAN                                                     
-----------------------------------------------------------------------------
Index Scan using t_pkey on t  (cost=0.42..2928.77 rows=73870 width=9) (actual time=52.526..52.529 rows=2 loops=1)
  Index Cond: (event_id <= 80001)
  Filter: (last_event_id >= '80001'::numeric)
  Rows Removed by Filter: 79999
Planning time: 0.211 ms
Execution time: 52.578 ms

Таким образом, PostgreSQL использует только индекс t_pkey и игнорирует t_idx.

Почему PostgreSQL не использует t_pkey и t_idx?

Я использую PostgreSQL 9.6 на Centos 7

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