простой выбор postgresql медленный - PullRequest
1 голос
/ 26 января 2012

у меня есть таблица:

CREATE TABLE my_table
(
  id integer NOT NULL DEFAULT nextval('seq_my_table_id'::regclass),
  fk_id1 integer NOT NULL,
  fk_id2 smallint NOT NULL,
  name character varying(255) NOT NULL,
  description text,
  currency_name character varying(3) NOT NULL,
  created timestamp with time zone NOT NULL DEFAULT now(),
  updated timestamp with time zone NOT NULL DEFAULT now(),
  CONSTRAINT "PK_my_table_id" PRIMARY KEY (id ),
  CONSTRAINT "FK_my_table_fk_id1" FOREIGN KEY (fk_id1)
      REFERENCES my_table2 (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED,
  CONSTRAINT "FK_my_table_fk_id2" FOREIGN KEY (fk_id2)
      REFERENCES my_table3 (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED
)
WITH (
  OIDS=FALSE,
  autovacuum_enabled=true,
  autovacuum_vacuum_threshold=50,
  autovacuum_vacuum_scale_factor=0.2,
  autovacuum_analyze_threshold=50,
  autovacuum_analyze_scale_factor=0.1,
  autovacuum_vacuum_cost_delay=20,
  autovacuum_vacuum_cost_limit=200,
  autovacuum_freeze_min_age=50000000,
  autovacuum_freeze_max_age=200000000,
  autovacuum_freeze_table_age=150000000
);
ALTER TABLE my_table
  OWNER TO postgres;

CREATE INDEX my_table_fk_id1
  ON my_table
  USING btree
  (fk_id1 );

CREATE INDEX my_table_fk_id2
  ON my_table
  USING btree
  (fk_id2 );

количество записей в таблицах

select count(id) from my_table; --24061
select count(id) from my_table2; --24061
select count(id) from my_table3; --123

время выполнения

select * from my_table -- ~17sec

vacuum/analyze - без эффекта
description - длина ~ 4000 символов в каждом ряду

postgres.conf - стандартные настройки

Версия: 9.1

выбрать все поля, кроме описания, сократить время выполнения до ~ 1, 5 сек

Как увеличить скорость выбора с описанием?

upd

--explain analyze select * from my_table
"Seq Scan on my_table (cost=0.00..3425.79 rows=24079 width=1015) (actual time=0.019..17.238 rows=24079 loops=1)"
"Total runtime: 18.649 ms"

1 Ответ

1 голос
/ 24 марта 2013

Вопрос в том, как сделать это быстро.Проблема не на сервере, так как она занимает там 18 мс.Простое решение состоит в том, чтобы выбрать меньше столбцов, чтобы их было меньше для передачи по сети.Я предполагаю, что у вас есть длинные описания некоторых.Оставьте этот столбец вне вашего выбора и попробуйте снова.

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