Sql 选择需要较长时间返回结果的查询

Sql 选择需要较长时间返回结果的查询,sql,postgresql,postgresql-9.4,postgresql-performance,Sql,Postgresql,Postgresql 9.4,Postgresql Performance,我的表格定义 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 varyi

我的表格定义

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;
上面的select语句需要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"
如何提高上述查询的性能

系统

macBook - i7 processor, 16GB RAM.

查询需要19毫秒,考虑到数据被缓存,这是一个合理的时间

对于5.8秒,有几种解释,可能是在客户机上测量的:

  • 原始运行中没有缓存数据(但这不能完全解释如此长的运行时间)

  • 客户机和服务器之间的网络真的很脆弱

  • 客户端(pgAdmin?)需要很长时间来呈现结果集


可能提高性能的一种方法是不要使用
SELECT*
,而只包括您特别需要的列。这减少了带宽传输时间。无法进一步优化您的查询,因为它没有任何条件。您使用什么技术来运行查询?也许可以对其中的某些内容进行优化,以更快地获取记录。此外,这是一个本地托管的数据库,还是您正在呼叫某个托管服务器?您希望查询运行快多少?@SamM在我的本地主机中使用,预计在2秒以下会快一点。我正在PgAdmin中执行查询。因为它是I7CPU和16GB RAM上的本地主机,所以我也希望有更好的性能。您可能值得花时间交叉发布到dba.stackexchange.com,看看该社区是否也能提供一些见解。不幸的是,我没有任何进一步的建议。希望其他人能说出来。@a_horse_,没有名字,用explain(分析、缓冲、格式化文本)更新了问题