【发布时间】:2021-05-29 05:29:13
【问题描述】:
我正在处理两个包含大量数据的表,每个表超过 1000 万。我需要连接两个表以获得所需的结果,但由于容量大,需要花费过多的时间。我试图分别执行两个表的每个操作,但我认为我的实现不正确。我正在发布表结构和我尝试过的查询
CREATE TABLE supply.supply_detail (
supply_detail_id bigint NOT NULL
DEFAULT nextval('supply.supply_detail_supply_detail_id_seq'::regclass),
supl_num numeric(15,0),
str numeric(7,0),
supl_dte character varying(10) COLLATE pg_catalog."default",
supl_num character varying(14) COLLATE pg_catalog."default",
cl_lvl numeric(7,0),
stp character varying(15) COLLATE pg_catalog."default",
poc_num numeric(3,0),
qty numeric(6,0),
sCost numeric(11,4)
);
还有:
CREATE TABLE supply.supply_header (
supply_header_id bigint NOT NULL
DEFAULT nextval('supply.supply_header_supply_header_id_seq'::regclass),
supl_num numeric(15,0),
supl_name character varying(30) COLLATE pg_catalog."default",
lclV character varying(5) COLLATE pg_catalog."default",
mkt numeric(7,0),
supl_dte character varying(10) COLLATE pg_catalog."default",
supl_num character varying(12) COLLATE pg_catalog."default",
ctrl_num numeric(7,0),
depar_dte character varying(10) COLLATE pg_catalog."default",
rrturn_typ character varying(1) COLLATE pg_catalog."default",
copy_on numeric(11,2),
expense numeric(11,2),
amt numeric(11,2),
inv_dte character varying(10) COLLATE pg_catalog."default",
fndg_dte character varying(10) COLLATE pg_catalog."default"
);
这是我尝试过的查询:
select SUPL_NUM, VND_NUM, SUPL_NAME, STORE
from (
select
supH.supl_num SUPL_NUM, supH.ora_vendor VND_NUM,
supH.supl_name SUPL_NAME, supH.str STORE,
supH.supl_dte, supH.supl_num Hsupl_NUM, supH.ctrl_num
from supply.supply_header supH
) HTBL,
(
select
supD.upc, supD.line_num,supD.qty_purchase,
supD.cost,supD.retail, supD.adj_ind, supD.supl_num Dsupl_NUM
from supply.supply_detail supD
) DTBL
where Hsupl_NUM = Dsupl_NUM
AND Dsupl_NUM = '394140308130'
AND SUPL_NUM = 41219
任何人都可以提出一个更好的方法来编写这个查询,它可以在最短的时间内给出一个最佳的结果。
【问题讨论】:
-
查看Slow queries,了解有关如何提高性能和报告必要信息以提供建议的提示。
标签: sql postgresql subquery large-data