[英]Postgresql Query is very Slow
我有一个300000行的表,当我运行一个简单的查询,如
select * from diario_det;
它留下41041毫秒返回行。 没关系? 我如何优化查询?
我在Centos 7中使用Postgresql 9.3。
这是我的桌子
CREATE TABLE diario_det
(
cod_empresa numeric(2,0) NOT NULL,
nro_asiento numeric(8,0) NOT NULL,
nro_secue_pase numeric(4,0) NOT NULL,
descripcion_pase character varying(150) NOT NULL,
monto_debe numeric(16,3),
monto_haber numeric(16,3),
estado character varying(1) NOT NULL,
cod_pcuenta character varying(15) NOT NULL,
cod_local numeric(2,0) NOT NULL,
cod_centrocosto numeric(4,0) NOT NULL,
cod_ejercicio numeric(4,0) NOT NULL,
nro_comprob character varying(15),
conciliado_por character varying(10),
CONSTRAINT fk_diario_det_cab FOREIGN KEY (cod_empresa, cod_local, cod_ejercicio, nro_asiento)
REFERENCES diario_cab (cod_empresa, cod_local, cod_ejercicio, nro_asiento) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_diario_det_pc FOREIGN KEY (cod_empresa, cod_pcuenta)
REFERENCES plan_cuenta (cod_empresa, cod_pcuenta) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=TRUE
);
ALTER TABLE diario_det
OWNER TO postgres;
-- Index: pk_diario_det_ax
-- DROP INDEX pk_diario_det_ax;
CREATE INDEX pk_diario_det_ax
ON diario_det
USING btree
(cod_pcuenta COLLATE pg_catalog."default", cod_local, estado COLLATE pg_catalog."default");
非常粗略的一行大小是231字节,乘以300000 ...它必须从服务器传输到客户端的69300000字节(~69MB)。
我认为41秒有点长,但由于必须从磁盘加载并传输的数据量,查询必须很慢。
您可以优化查询
cod_empresa
将减少传输的数据总量〜1.2MB,但服务器仍然有低谷遍历所有记录-慢) WHERE
列上带索引才能真正加快了查询 如果您想知道查询中发生了什么,请使用EXPLAIN
和EXPLAIN EXECUTE
。
此外,如果您正在运行专用数据库服务器,请确保正确配置它以使用大量系统资源 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.