Extremely slow query

From: "Patrick Hatcher" <PHatcher(at)macys(dot)com>
To: pgsql-sql(at)postgresql(dot)org
Subject: Extremely slow query
Date: 2002-07-29 23:32:57
Message-ID: OF08219BDE.268A1C14-ON88256C05.007FF89B-88256C05.00815059@fds.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

System:
OS: RedHat 7.2
Dual PIII XEON
Mem 512 mg
PG: 7.2

I have what I think is a fairly simple summary query, but it takes 1:55 to
run on just 155k records. The query hits against a single table that I use
for reporting purposes. This table is truncated, refreshed, reindexed, and
vacuum analysed each night. Other than the initial table update, no other
data is added during the day.

Any help would be appreciated. My little Win2k with a PIII 500 and 256mgs
is out performing this monster machine.

query:
SELECT gmmid, gmmname, divid, divname, feddept, deptname, fedvend,
vendor_name, masterid, master_desc, pageid, oz_description, (
CASE
WHEN (masterid IS NULL) THEN pageid
ELSE masterid END)::character varying(15) AS pagemaster,
CASE
WHEN (masterid IS NULL) THEN oz_description
ELSE master_desc
END AS pagemaster_desc,
CASE
WHEN (masterid IS NULL) THEN price_original
ELSE NULL::float8
END AS org_price_display,
CASE
WHEN (masterid IS NULL) THEN cur_price
ELSE NULL::float8
END AS cur_price_display, price_original, price_owned_retail,
cur_price, oz_color, oz_size, pageflag, itemnumber,
sum(cur_demandu + cur_returnu) AS cur_net_units,
sum(cur_demanddol + wtd_returndol) AS cur_net_dollar,
sum(wtd_demandu + wtd_returnu) AS wtd_net_units,
sum(wtd_demanddol + wtd_returndol) AS wtd_net_dollar,
sum(lw_demand + lw_returnu) AS lw_net_units,
sum(lw_demanddollar + lw_returndollar) AS lw_net_dollar,
sum(ptd_demanddollar + ptd_returndollar) AS ptd_net_dollar,
sum(ptd_demand + ptd_returnu) AS ptd_net_units,
sum(std_demanddollar + std_returndollar) AS std_net_dollar,
sum(std_demand + std_returnu) AS std_net_units,
sum(total_curoh) AS total_curoh,
sum(total_curoo) AS total_curoo,
sum((float8(total_curoh) * price_owned_retail)) AS curoh_dollar,
sum((float8(total_curoo) * price_owned_retail)) AS curoo_dollar,
sum(total_oh) AS total_oh,
sum(total_oo) AS total_oo,
sum((float8(total_oh) * price_owned_retail)) AS oh_dollar,
sum((float8(total_oh) * price_owned_retail)) AS oo_dollar, mkd_status,
option4_flag
FROM tbldetaillevel_report detaillevel_report_v
GROUP BY gmmid, gmmname, divid, divname, feddept, deptname, fedvend,
vendor_name, masterid, master_desc, pageid, oz_description,
CASE
WHEN (masterid IS NULL) THEN pageid
ELSE masterid
END,
CASE
WHEN (masterid IS NULL) THEN oz_description
ELSE master_desc
END,
CASE
WHEN (masterid IS NULL) THEN price_original
ELSE NULL::float8
END,
CASE
WHEN (masterid IS NULL) THEN cur_price
ELSE NULL::float8
END, price_original, price_owned_retail, cur_price, oz_color, oz_size,
pageflag, itemnumber, mkd_status, option4_flag

EXPLAIN ANALYSE results:
Aggregate (cost=56487.32..72899.02 rows=15267 width=356)
-> Group (cost=56487.32..66029.01 rows=152667 width=356)
-> Sort (cost=56487.32..56487.32 rows=152667 width=356)
-> Seq Scan on tbldetaillevel_report detaillevel_report_v
(cost=0.00..9932.67 rows=152667 width=356)

Table Def:
CREATE TABLE tbldetaillevel_report (
pageid int4,
feddept int4,
fedvend int4,
oz_description varchar(254),
price_owned_retail float8,
oz_color varchar(50),
oz_size varchar(50),
lw_demanddollar float8,
ptd_demanddollar float8,
std_demanddollar float8,
lw_returndollar float8,
ptd_returndollar float8,
std_returndollar float8,
lw_demand int4,
ptd_demand int4,
std_demand int4,
lw_returnu int4,
ptd_returnu int4,
std_returnu int4,
divid int4,
divname varchar(35),
gmmid int4,
gmmname varchar(35),
deptname varchar(35),
total_oh int4,
total_oo int4,
vendorname varchar(40),
dunsnumber varchar(9),
current_week int4,
current_period int4,
week_end date,
varweek int4,
varperiod int4,
upc int8,
pageflag int2,
upcflag int2,
pid varchar(30),
cur_price float8,
vendor_name varchar(40),
ly_lw_demanddollar float8,
ly_ptd_demanddollar float8,
ly_std_demanddollar float8,
itemnumber varchar(15),
mkd_status int2,
lw_1_demanddollar float8,
lw_2_demanddollar float8,
lw_3_demanddollar float8,
lw_4_demanddollar float8,
masterid int4,
master_desc varchar(254),
cur_demandu int4,
cur_demanddol float8,
cur_returnu int4,
cur_returndol float8,
wtd_demandu int4,
wtd_demanddol float8,
wtd_returnu int4,
wtd_returndol float8,
total_curoh int4,
total_curoo int4,
curr_date date,
lw_1_demand int4,
lw_2_demand int4,
lw_3_demand int4,
lw_4_demand int4,
option4_flag int2,
option3_flag int2,
price_original float8,
price_ticket float8
)

Patrick Hatcher

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Christopher Kings-Lynne 2002-07-30 01:42:21 Re: Returning PK of first insert for second insert use.
Previous Message Tom Lane 2002-07-29 20:39:43 Re: Decision support query inefficiencies ...