запрос на выбор занимает больше времени, чтобы вернуть результаты - PullRequest
1 голос
/ 13 мая 2019

Определение моей таблицы

CREATE TABLE public.state
(
  id integer NOT NULL,
  state character varying(50),
  district character varying(50),
  block character varying(50),
  panchayat character varying(50),
  village character varying(50),
  habitation character varying(50),
  CONSTRAINT state_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.state
  OWNER TO postgres;


CREATE INDEX state_allx
  ON public.state
  USING btree
  (id, state COLLATE pg_catalog."default", district COLLATE pg_catalog."default", block COLLATE pg_catalog."default", panchayat COLLATE pg_catalog."default", village COLLATE pg_catalog."default", habitation COLLATE pg_catalog."default");


CREATE INDEX state_habitationx
  ON public.state
  USING btree
  (id, habitation COLLATE pg_catalog."default");


CREATE INDEX state_idx
  ON public.state
  USING btree
  (id);

В таблице 80359 строк.

  select * from state;

Приведенный выше оператор выбора занимает 5,8 секунды, чтобы вернуть результаты.

Total query runtime: 5.8 secs
80359 rows retrieved.

Объясните, возвращая следующий результат.

EXPLAIN select * from state;

"Seq Scan on state  (cost=0.00..1872.59 rows=80359 width=75)"

Подробное ОБЪЯСНЕНИЕ

EXPLAIN  (analyze, buffers, format text) select * from state ;

"Seq Scan on state  (cost=0.00..1872.59 rows=80359 width=712) (actual time=0.022..13.700 rows=80359 loops=1)"
"  Buffers: shared hit=1069"
"Planning Time: 0.727 ms"
"Execution Time: 19.810 ms"

Как повысить производительность вышеуказанного запроса.

System

macBook - i7 processor, 16GB RAM.

1 Ответ

1 голос
/ 14 мая 2019

Запрос занимает 19 миллисекунд, что является разумным временем, если данные кэшируются.

Есть несколько объяснений 5,8 секунд, которые, вероятно, были измерены на клиенте:

  • Данные не были кэшированы в исходном прогоне (но это не может полностью объяснить такой длительный прогон).

  • Сеть между клиентом и сервером действительно хромает.

  • Клиенту (pgAdmin?) Требуется много времени для отображения набора результатов.

...