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

м с использованием PostgreSQL (9.2.0) и иметь таблицу диапазонов IP-адресов. Вот's SQL: я

CREATE TABLE ips
(
  id serial NOT NULL,
  begin_ip_num bigint,
  end_ip_num bigint,
  country_name character varying(255),
  CONSTRAINT ips_pkey PRIMARY KEY (id )
)

мы добавили индексы на обоихbegin_ip_num а также :end_ip_num

CREATE INDEX index_ips_on_begin_ip_num
  ON ips
  USING btree
  (begin_ip_num );

CREATE INDEX index_ips_on_end_ip_num
  ON ips
  USING btree
  (end_ip_num );

Используемый запрос:

SELECT "ips".* FROM "ips" WHERE (3065106743 BETWEEN begin_ip_num AND end_ip_num);

Проблема в том, что мойBETWEEN запрос только с использованием индекса наbegin_ip_num, После использования индекса он фильтрует результат, используяend_ip_num, Вот'сEXPLAIN ANALYZE Результат: я

Index Scan using index_ips_on_begin_ip_num on ips  (cost=0.00..2173.83 rows=27136 width=76) (actual time=16.349..16.350 rows=1 loops=1)
Index Cond: (3065106743::bigint >= begin_ip_num)
Filter: (3065106743::bigint 

Ответы на вопрос(4)

Ваш ответ на вопрос