ืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ืขืœ ืื™ืš ื”ื™ื™ืชื™ ืฆืจื™ืš ืœื™ื™ืขืœ ืืช ืฉืื™ืœืชืช PostgreSQL ื•ืžื” ื™ืฆื ืžื›ืœ ื–ื”.
ืœืžื” ื”ื™ื™ืช ื—ื™ื™ื‘? ื›ืŸ, ื›ื™ ื‘ืžืฉืš 4 ื”ืฉื ื™ื ื”ืงื•ื“ืžื•ืช ื”ื›ืœ ืขื‘ื“ ื‘ืฉืงื˜, ื‘ืจื•ื’ืข, ื›ืžื• ืฉืขื•ืŸ ืžืชืงืชืง.
ื‘ืชื•ืจ ืืคื™ื’ืจืฃ.

ืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ืžื‘ื•ืกืก ืขืœ ืื™ืจื•ืขื™ื ืืžื™ืชื™ื™ื.
ื›ืœ ื”ืฉืžื•ืช ืฉื•ื ื•, ืฆื™ืจื•ืคื™ ืžืงืจื™ื ื”ื ืืงืจืื™ื™ื.

ื›ืืฉืจ ืืชื” ืžืฉื™ื’ ืชื•ืฆืื” ืžืกื•ื™ืžืช, ืชืžื™ื“ ืžืขื ื™ื™ืŸ ืœื”ื™ื–ื›ืจ ืžื” ื”ื™ื” ื”ื“ื—ืฃ ืœื”ืชื—ืœื”, ืื™ืคื” ื”ื›ืœ ื”ืชื—ื™ืœ.

ืื– ืžื” ืฉืงืจื” ื›ืชื•ืฆืื” ืžื›ืš ืžืชื•ืืจ ื‘ืงืฆืจื” ื‘ืžืืžืจ "ืกื™ื ืชื–ื” ื›ืื—ืช ื”ืฉื™ื˜ื•ืช ืœืฉื™ืคื•ืจ ื‘ื™ืฆื•ืขื™ PostgreSQL".

ื›ื ืจืื” ื™ื”ื™ื” ืžืขื ื™ื™ืŸ ืœืฉื—ื–ืจ ืืช ืฉืจืฉืจืช ื”ืื™ืจื•ืขื™ื ื”ืงื•ื“ืžื™ื.
ื”ื”ื™ืกื˜ื•ืจื™ื” ืฉืžืจื” ืืช ืชืืจื™ืš ื”ื”ืชื—ืœื” ื”ืžื“ื•ื™ืง - 2018-09-10 18:02:48.
ื›ืžื• ื›ืŸ, ื‘ืกื™ืคื•ืจ ื™ืฉ ื‘ืงืฉื” ืฉืžืžื ื” ื”ื›ืœ ื”ืชื—ื™ืœ:
ื‘ืงืฉืช ื‘ืขื™ื”ืœื‘ื—ื•ืจ
p.โ€œPARAMETER_IDโ€ ื‘ืชื•ืจ parameter_id,
pd."PD_NAME" AS pd_name,
pd."CUSTOMER_PARTNUMBER" AS customer_partnumber,
w. "LRM" AS LRM,
w. "LOTID" AS lotid,
w.โ€œRTD_VALUEโ€ AS RTD_value,
w.โ€œLOWER_SPEC_LIMITโ€ AS lower_spec_limit,
w.โ€œUPPER_SPEC_LIMITโ€ AS upper_spec_limit,
p."TYPE_CALCUL" AS type_calcul,
s."SPENT_NAME" AS spend_name,
s.โ€œSPENT_DATEโ€ AS spent_date,
extract(year from "SPENT_DATE") AS year,
extract(month from "SPENT_DATE") ื›ื—ื•ื“ืฉ,
s."REPORT_NAME" AS report_name,
p."STPM_NAME" AS stpm_name,
p.โ€œCUSTOMERPARAM_NAMEโ€ AS customerparam_name
ืž-wdata w,
ื‘ื™ืœื” s,
pmtr p,
spend_pd sp,
pd pd
WHERE s.โ€œSPENT_IDโ€ = w.โ€œSPENT_IDโ€
ื•-p."PARAMETER_ID" = w."PARAMETER_ID"
AND s.โ€œSPENT_IDโ€ = sp.โ€œSPENT_IDโ€
AND pd."PD_ID" = sp."PD_ID"
AND s.โ€œSPENT_DATEโ€ >= '2018-07-01' ื•-s.โ€œSPENT_DATEโ€ <= '2018-09-30'
ื•-s.โ€œSPENT_DATEโ€ = (ื‘ื—ืจ MAX(s2.โ€œSPENT_DATEโ€)
ืžื”ื•ืฆืืช s2,
wdata w2
WHERE s2.โ€œSPENT_IDโ€ = w2.โ€œSPENT_IDโ€
AND w2.โ€œLRMโ€ = w.โ€œLRMโ€);


ืชื™ืื•ืจ ื”ื‘ืขื™ื” ื”ื•ื ื›ืฆืคื•ื™ ืกื˜ื ื“ืจื˜ื™ - "ื”ื›ืœ ืจืข. ืกืคืจ ืœื™ ืžื” ื”ื‘ืขื™ื”."
ืžื™ื“ ื ื–ื›ืจืชื™ ื‘ืื ืงื“ื•ื˜ื” ืžื”ื–ืžื ื™ื ืฉืœ ื›ื•ื ื ื™ื ืฉืœ 3 ื•ื—ืฆื™ ืื™ื ืฅ':

ื”ืœื•ืžืจ ืžื’ื™ืข ืืœ ื”ื”ืืงืจ.
-ืฉื•ื ื“ื‘ืจ ืœื ืขื•ื‘ื“ ืœื™, ืชื’ื™ื“ ืœื™ ืื™ืคื” ื”ื‘ืขื™ื”.
-ื‘-DNA...

ืื‘ืœ ื›ืžื•ื‘ืŸ, ื–ื• ืœื ื”ื“ืจืš ืœืคืชื•ืจ ืชืงืจื™ื•ืช ื‘ื™ืฆื•ืขื™ื. "ืื•ืœื™ ื”ื ืœื ืžื‘ื™ื ื™ื ืื•ืชื ื•" (ืขื). ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ื‘ื™ืŸ ืืช ื–ื”.
ื•ื‘ื›ืŸ, ื‘ื•ื ื ื—ืคื•ืจ. ืื•ืœื™ ืžืฉื”ื• ื™ืฆื˜ื‘ืจ ื›ืชื•ืฆืื” ืžื›ืš.

ืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ื”ื—ืœื” ื—ืงื™ืจื”

ืื– ืžื” ื ื™ืชืŸ ืœืจืื•ืช ืžื™ื“ ื‘ืขื™ืŸ ื‘ืœืชื™ ืžื–ื•ื™ื ืช, ืืคื™ืœื• ื‘ืœื™ ืœื”ื–ื“ืงืง ืœื”ืกื‘ืจ.
1) ืื™ืŸ ืฉื™ืžื•ืฉ ื‘-JOIN. ื–ื” ืจืข, ื‘ืžื™ื•ื—ื“ ืื ืžืกืคืจ ื”ื—ื™ื‘ื•ืจื™ื ื”ื•ื ื™ื•ืชืจ ืžืื—ื“.
2) ืื‘ืœ ืžื” ืฉื’ืจื•ืข ืขื•ื“ ื™ื•ืชืจ ื”ื•ื ืฉืื™ืœืชื•ืช ืžืฉื ื” ืžืชื•ืืžื•ืช, ื™ืชืจ ืขืœ ื›ืŸ, ืขื ืฆื‘ื™ืจื”. ื–ื” ืจืข ืžืื•ื“.
ื–ื” ืจืข ื›ืžื•ื‘ืŸ. ืื‘ืœ ื–ื” ืจืง ืžืฆื“ ืื—ื“. ืžืฆื“ ืฉื ื™, ื–ื” ื˜ื•ื‘ ืžืื•ื“, ื›ื™ ืœื‘ืขื™ื” ื‘ืจื•ืจ ืฉื™ืฉ ืคืชืจื•ืŸ ื•ื‘ืงืฉื” ืฉื ื™ืชืŸ ืœืฉืคืจ.
ืืœ ืชืœืš ืœืžื’ื“ ืขืชื™ื“ื•ืช (ื’).
ืชื•ื›ื ื™ืช ื”ืฉืื™ืœืชื•ืช ืœื ื›ืœ ื›ืš ืžืกื•ื‘ื›ืช, ืื‘ืœ ื”ื™ื ื“ื™ ืžืขื™ื“ื”:
ืชื•ื›ื ื™ืช ื‘ื™ืฆื•ืขืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ื”ืžืขื ื™ื™ืŸ ื•ื”ืฉื™ืžื•ืฉื™ ื‘ื™ื•ืชืจ, ื›ืจื’ื™ืœ, ื”ื•ื ื‘ื”ืชื—ืœื” ื•ื‘ืกื•ืฃ.
ืœื•ืœืื” ืžืงื•ื ื ืช (ืขืœื•ืช=935.84..479763226.18 ืฉื•ืจื•ืช=3322 ืจื•ื—ื‘=135) (ื–ืžืŸ ื‘ืคื•ืขืœ=31.536..8220420.295 ืฉื•ืจื•ืช=8111656 ืœื•ืœืื•ืช=1)
ื–ืžืŸ ืชื›ื ื•ืŸ: 3.807 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”
ื–ืžืŸ ื‘ื™ืฆื•ืข: 8222351.640 ms
ื–ืžืŸ ื”ื”ืฉืœืžื” ื”ื•ื ื™ื•ืชืจ ืžืฉืขืชื™ื™ื.

ืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ื”ืฉืขืจื•ืช ืฉื•ื•ื ืฉืœืงื— ื–ืžืŸ

ื”ืฉืขืจื” 1 - ื”ืžื™ื™ืขืœ ืขื•ืฉื” ื˜ืขื•ืช ื•ื‘ื•ื ื” ืืช ื”ืชื•ื›ื ื™ืช ื”ืœื ื ื›ื•ื ื”.

ื›ื“ื™ ืœื”ืžื—ื™ืฉ ืืช ืชื•ื›ื ื™ืช ื”ื‘ื™ืฆื•ืข, ื ืฉืชืžืฉ ื‘ืืชืจ https://explain.depesz.com/. ืขื ื–ืืช, ื”ืืชืจ ืœื ื”ืจืื” ืฉื•ื ื“ื‘ืจ ืžืขื ื™ื™ืŸ ืื• ืฉื™ืžื•ืฉื™. ื‘ืžื‘ื˜ ืจืืฉื•ืŸ ื•ืฉื ื™, ืื™ืŸ ืฉื•ื ื“ื‘ืจ ืฉื™ื›ื•ืœ ื‘ืืžืช ืœืขื–ื•ืจ. ื”ืื ื™ื™ืชื›ืŸ ืฉืกืจื™ืงื” ืžืœืื” ื”ื™ื ืžื™ื ื™ืžืœื™ืช. ืœืš ืขืœ ื–ื”.

ื”ืฉืขืจื” 2-ื”ืฉืคืขื” ืขืœ ื”ื‘ืกื™ืก ืžืฆื“ ื”ื•ื•ืืงื•ื ื”ืื•ื˜ื•ืžื˜ื™, ืืชื” ืฆืจื™ืš ืœื”ื™ืคื˜ืจ ืžื”ื‘ืœืžื™ื.

ืื‘ืœ ื“ืžื•ื ื™ ื”ื•ื•ืืงื•ื ื”ืื•ื˜ื•ืžื˜ื™ื™ื ืžืชื ื”ื’ื™ื ื”ื™ื˜ื‘, ืื™ืŸ ืชื”ืœื™ื›ื™ื ืฉื ืžืฉื›ื™ื ื–ืžืŸ ืจื‘. ืื™ืŸ ืขื•ืžืก ืจืฆื™ื ื™. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื—ืคืฉ ืžืฉื”ื• ืื—ืจ.

ื”ืฉืขืจื” 3 - ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ืžื™ื•ืฉื ืช, ืฆืจื™ืš ืœื—ืฉื‘ ื”ื›ืœ ืžื—ื“ืฉ

ืฉื•ื‘, ืœื ื–ื”. ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ืžืขื•ื“ื›ื ืช. ืžื”, ื‘ื”ืชื—ืฉื‘ ื‘ื”ื™ืขื“ืจ ื‘ืขื™ื•ืช ืขื ื•ืืงื•ื ืื•ื˜ื•ืžื˜ื™, ืœื ืžืคืชื™ืข.

ื‘ื•ืื• ื ืชื—ื™ืœ ืœื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”

ื”ื˜ื‘ืœื” ื”ืจืืฉื™ืช 'wdata' ื”ื™ื ื‘ื”ื—ืœื˜ ืœื ืงื˜ื ื”, ื›ืžืขื˜ 3 ืžื™ืœื™ื•ืŸ ืจืฉื•ืžื•ืช.
ื•ื˜ื‘ืœื” ื–ื• ืขื•ืงื‘ืช ืื—ืจ ืกืจื™ืงื” ืžืœืื”.

Hash Cond: ((w."SPENT_ID" = s."SPENT_ID") AND ((SubPlan 1) = s"SPENT_DATE"))
-> ืกืจื™ืงืช Seq ืขืœ wdata w (ืขืœื•ืช=0.00..574151.49 rows=26886249 width=46) (ื–ืžืŸ ื‘ืคื•ืขืœ=0.005..8153.565 rows=26873950 ืœื•ืœืื•ืช=1)
ืื ื—ื ื• ืขื•ืฉื™ื ืืช ื”ื“ื‘ืจ ื”ืกื˜ื ื“ืจื˜ื™: "ื™ืืœืœื”, ื‘ื•ืื• ื ืขืฉื” ืื™ื ื“ืงืก ื•ื”ื›ืœ ื™ืขื•ืฃ".
ื™ืฆืจ ืื™ื ื“ืงืก ื‘ืฉื“ื” "SPENT_ID".
ื›ืชื•ืฆืื” ืžื›ืš:
ืชื•ื›ื ื™ืช ื‘ื™ืฆื•ืข ืฉืื™ืœืชื” ื‘ืืžืฆืขื•ืช ืื™ื ื“ืงืกืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ื•ื‘ื›ืŸ, ื–ื” ืขื–ืจ?
ื–ื” ื”ื™ื”: 8 222 351.640 MS (ืงืฆืช ื™ื•ืชืจ ืžืฉืขืชื™ื™ื)
ื–ื” ื”ืคืš: 6 985 431.575 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” (ื›ืžืขื˜ ืฉืขืชื™ื™ื)
ื‘ืื•ืคืŸ ื›ืœืœื™, ืื•ืชื ืชืคื•ื—ื™ื, ืžื‘ื˜ ืžื”ืฆื“.
ื‘ื•ืื• ื ื–ื›ื•ืจ ืืช ื”ืงืœืืกื™ืงื”:
"ื™ืฉ ืœืš ืื•ืชื• ืื—ื“, ืื‘ืœ ื‘ืœื™ ื›ื ืคื™ื™ื? ื™ื—ืคืฉ".

ืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืืคืฉืจ ืœืงืจื•ื ืœื–ื” ืชื•ืฆืื” ื˜ื•ื‘ื”, ื•ื‘ื›ืŸ, ืœื ื˜ื•ื‘ื”, ืื‘ืœ ืžืงื•ื‘ืœืช. ืœื›ืœ ื”ืคื—ื•ืช, ืกืคืง ื“ื•ื— ื’ื“ื•ืœ ืœืœืงื•ื— ื”ืžืชืืจ ื›ืžื” ื ืขืฉื” ื•ืœืžื” ืžื” ืฉื ืขืฉื” ื”ื™ื” ื˜ื•ื‘.
ืื‘ืœ ืขื“ื™ื™ืŸ, ื”ื”ื—ืœื˜ื” ื”ืกื•ืคื™ืช ืขื“ื™ื™ืŸ ืจื—ื•ืงื”. ืจื—ื•ืง ืžืื•ื“.

ื•ืขื›ืฉื™ื• ื”ื“ื‘ืจ ื”ื›ื™ ืžืขื ื™ื™ืŸ - ืื ื—ื ื• ืžืžืฉื™ื›ื™ื ืœื™ื™ืขืœ, ื ืœื˜ืฉ ืืช ื”ื‘ืงืฉื”

ืฉืœื‘ ืจืืฉื•ืŸ - ื”ืฉืชืžืฉ ื‘-JOIN

ื”ื‘ืงืฉื” ื”ืžืฉื•ื›ืชื‘ืช ื ืจืื™ืช ื›ืขืช ื›ืš (ื˜ื•ื‘ ืœืคื—ื•ืช ื™ื•ืชืจ ื™ืคื”):
ืฉืื™ืœืชื” ื‘ืืžืฆืขื•ืช JOINืœื‘ื—ื•ืจ
p.โ€œPARAMETER_IDโ€ ื‘ืชื•ืจ parameter_id,
pd."PD_NAME" AS pd_name,
pd."CUSTOMER_PARTNUMBER" AS customer_partnumber,
w. "LRM" AS LRM,
w. "LOTID" AS lotid,
w.โ€œRTD_VALUEโ€ AS RTD_value,
w.โ€œLOWER_SPEC_LIMITโ€ AS lower_spec_limit,
w.โ€œUPPER_SPEC_LIMITโ€ AS upper_spec_limit,
p."TYPE_CALCUL" AS type_calcul,
s."SPENT_NAME" AS spend_name,
s.โ€œSPENT_DATEโ€ AS spent_date,
extract(year from "SPENT_DATE") AS year,
extract(month from "SPENT_DATE") ื›ื—ื•ื“ืฉ,
s."REPORT_NAME" AS report_name,
p."STPM_NAME" AS stpm_name,
p.โ€œCUSTOMERPARAM_NAMEโ€ AS customerparam_name
FROM wdata w INNER JOIN ื‘ื™ืœื” s ON w.โ€œSPENT_IDโ€=s.โ€โ€œSPENT_IDโ€
INNER JOIN pmtr p ON p.โ€œPARAMETER_IDโ€ = w.โ€œPARAMETER_IDโ€
INNER JOIN spent_pd sp ON s.โ€œSPENT_IDโ€ = sp.โ€œSPENT_IDโ€
INNER JOIN pd pd ON pd.โ€œPD_IDโ€ = sp.โ€œPD_IDโ€
ืื™ืคื”
s.โ€œSPENT_DATEโ€ >= '2018-07-01' ื•-s.โ€œSPENT_DATEโ€ <= '2018-09-30'AND
s.โ€œSPENT_DATEโ€ = (ื‘ื—ืจ MAX(s2.โ€œSPENT_DATEโ€)
FROM wdata w2 INNER JOIN ื”ื•ืฆื s2 ON w2.โ€œSPENT_IDโ€=s2.โ€œSPENT_IDโ€
INNER JOIN wdata w
ON w2.โ€œLRMโ€ = w.โ€œLRMโ€ );
ื–ืžืŸ ืชื›ื ื•ืŸ: 2.486 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”
ื–ืžืŸ ื‘ื™ืฆื•ืข: 1223680.326 ms

ืื–, ื”ืชื•ืฆืื” ื”ืจืืฉื•ื ื”.
ื–ื” ื”ื™ื”: 6 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” (ื›ืžืขื˜ ืฉืขืชื™ื™ื).
ื–ื” ื”ืคืš: 1 223 680.326 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” (ืžืขื˜ ื™ื•ืชืจ ืž-20 ื“ืงื•ืช).
ืชื•ืฆืื” ื˜ื•ื‘ื”. ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืฉื•ื‘, ื ื•ื›ืœ ืœืขืฆื•ืจ ืฉื. ืื‘ืœ ื–ื” ื›ืœ ื›ืš ืœื ืžืขื ื™ื™ืŸ, ืื™ ืืคืฉืจ ืœื”ืคืกื™ืง.
ืœ

ืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ืฉืœื‘ ืฉื ื™ - ื”ื™ืคื˜ืจ ืžืฉืื™ืœืช ื”ืžืฉื ื” ื”ืžืชื•ืืžืช

ื˜ืงืกื˜ ื‘ืงืฉื” ืฉื•ื ื”:
ืœืœื ืฉืื™ืœืชืช ืžืฉื ื” ื‘ืงื•ืจืœืฆื™ื”ืœื‘ื—ื•ืจ
p.โ€œPARAMETER_IDโ€ ื‘ืชื•ืจ parameter_id,
pd."PD_NAME" AS pd_name,
pd."CUSTOMER_PARTNUMBER" AS customer_partnumber,
w. "LRM" AS LRM,
w. "LOTID" AS lotid,
w.โ€œRTD_VALUEโ€ AS RTD_value,
w.โ€œLOWER_SPEC_LIMITโ€ AS lower_spec_limit,
w.โ€œUPPER_SPEC_LIMITโ€ AS upper_spec_limit,
p."TYPE_CALCUL" AS type_calcul,
s."SPENT_NAME" AS spend_name,
s.โ€œSPENT_DATEโ€ AS spent_date,
extract(year from "SPENT_DATE") AS year,
extract(month from "SPENT_DATE") ื›ื—ื•ื“ืฉ,
s."REPORT_NAME" AS report_name,
p."STPM_NAME" AS stpm_name,
p.โ€œCUSTOMERPARAM_NAMEโ€ AS customerparam_name
FROM wdata w INNER JOIN ื‘ื™ืœื” s ON s.โ€œSPENT_IDโ€ = w.โ€œSPENT_IDโ€
INNER JOIN pmtr p ON p.โ€œPARAMETER_IDโ€ = w.โ€œPARAMETER_IDโ€
INNER JOIN spent_pd sp ON s.โ€œSPENT_IDโ€ = sp.โ€œSPENT_IDโ€
INNER JOIN pd pd ON pd.โ€œPD_IDโ€ = sp.โ€œPD_IDโ€
INNER JOIN (ื‘ื—ืจ w2.โ€œLRMโ€, MAX(s2.โ€œSPENT_DATEโ€)
FROM ื‘ื™ืœื” s2 INNER JOIN wdata w2 ON s2.โ€œSPENT_IDโ€ = w2.โ€œSPENT_IDโ€
GROUP BY w2."LRM"
) md on w.โ€œLRMโ€ = md.โ€œLRMโ€
ืื™ืคื”
s."SPENT_DATE" >= '2018-07-01' ื•-s"SPENT_DATE" <= '2018-09-30';
ื–ืžืŸ ืชื›ื ื•ืŸ: 2.291 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”
ื–ืžืŸ ื‘ื™ืฆื•ืข: 165021.870 ms

ื–ื” ื”ื™ื”: 1 223 680.326 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” (ืžืขื˜ ื™ื•ืชืจ ืž-20 ื“ืงื•ืช).
ื–ื” ื”ืคืš: 165 021.870 ms (ืžืขื˜ ื™ื•ืชืจ ืž-2 ื“ืงื•ืช).
ื–ื” ื›ื‘ืจ ื“ื™ ื˜ื•ื‘.
ืขื ื–ืืช, ื›ืžื• ืฉืื•ืžืจื™ื ื”ื‘ืจื™ื˜ื™ื "ืื‘ืœ, ืชืžื™ื“ ื™ืฉ ืื‘ืœ" ืชื•ืฆืื” ื˜ื•ื‘ื” ืžื“ื™ ืืžื•ืจื” ืœืขื•ืจืจ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ื—ืฉื“. ืžืฉื”ื• ืœื ื‘ืกื“ืจ ื›ืืŸ.

ื”ื”ืฉืขืจื” ืœื’ื‘ื™ ืชื™ืงื•ืŸ ื”ืฉืื™ืœืชื” ื›ื“ื™ ืœื”ื™ืคื˜ืจ ืžืชืช ืฉืื™ืœืชืช ื”ืžืชืื ื ื›ื•ื ื”. ืื‘ืœ ืืชื” ืฆืจื™ืš ืœืฆื‘ื•ื˜ ืื•ืชื• ืžืขื˜ ื›ื“ื™ ืฉื”ืชื•ืฆืื” ื”ืกื•ืคื™ืช ืชื”ื™ื” ื ื›ื•ื ื”.
ื›ืชื•ืฆืื” ืžื›ืš, ืชื•ืฆืืช ื”ื‘ื™ื ื™ื™ื ื”ืจืืฉื•ื ื”:
ืฉืื™ืœืชื” ืขืจื•ื›ื” ืœืœื ืฉืื™ืœืชืช ืžืฉื ื” ื‘ื”ืชืืžื”ืœื‘ื—ื•ืจ
p.โ€œPARAMETER_IDโ€ ื‘ืชื•ืจ parameter_id,
pd."PD_NAME" AS pd_name,
pd."CUSTOMER_PARTNUMBER" AS customer_partnumber,
w. "LRM" AS LRM,
w. "LOTID" AS lotid,
w.โ€œRTD_VALUEโ€ AS RTD_value,
w.โ€œLOWER_SPEC_LIMITโ€ AS lower_spec_limit,
w.โ€œUPPER_SPEC_LIMITโ€ AS upper_spec_limit,
p."TYPE_CALCUL" AS type_calcul,
s."SPENT_NAME" AS spend_name,
s.โ€œSPENT_DATEโ€ AS spent_date,
extract(year from s.โ€œSPENT_DATEโ€) AS year,
ื—ืœืฅ (ื—ื•ื“ืฉ ืžืชืืจื™ืš s.โ€œSPENT_DATEโ€) ื›ื—ื•ื“ืฉ,
s."REPORT_NAME" AS report_name,
p."STPM_NAME" AS stpm_name,
p.โ€œCUSTOMERPARAM_NAMEโ€ AS customerparam_name
FROM wdata w INNER JOIN ื‘ื™ืœื” s ON s.โ€œSPENT_IDโ€ = w.โ€œSPENT_IDโ€
INNER JOIN pmtr p ON p.โ€œPARAMETER_IDโ€ = w.โ€œPARAMETER_IDโ€
INNER JOIN spent_pd sp ON s.โ€œSPENT_IDโ€ = sp.โ€œSPENT_IDโ€
INNER JOIN pd pd ON pd.โ€œPD_IDโ€ = sp.โ€œPD_IDโ€
INNER JOIN (ื‘ื—ืจ w2.โ€œLRMโ€, MAX(s2.โ€œSPENT_DATEโ€) ื›-โ€œSPENT_DATEโ€
FROM ื‘ื™ืœื” s2 INNER JOIN wdata w2 ON s2.โ€œSPENT_IDโ€ = w2.โ€œSPENT_IDโ€
GROUP BY w2."LRM"
) md ON md.โ€œSPENT_DATEโ€ = s.โ€œSPENT_DATEโ€ ื•-md.โ€œLRMโ€ = w.โ€œLRMโ€
ืื™ืคื”
s."SPENT_DATE" >= '2018-07-01' ื•-s"SPENT_DATE" <= '2018-09-30';
ื–ืžืŸ ืชื›ื ื•ืŸ: 3.192 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”
ื–ืžืŸ ื‘ื™ืฆื•ืข: 208014.134 ms

ืื– ืžื” ืฉืื ื—ื ื• ืžืงื‘ืœื™ื ื”ื•ื ื”ืชื•ืฆืื” ื”ืžืงื•ื‘ืœืช ื”ืจืืฉื•ื ื”, ืฉืœื ื—ื‘ืœ ืœื”ืจืื•ืช ืœืœืงื•ื—:
ื”ืชื—ื™ืœ ืขื: 8 222 351.640 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” (ื™ื•ืชืจ ืžืฉืขืชื™ื™ื)
ื”ืฆืœื—ื ื• ืœื”ืฉื™ื’: 1 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” (ืงืฆืช ื™ื•ืชืจ ืž-223 ื“ืงื•ืช).
ืชื•ืฆืื” (ื‘ื™ื ื™ื™ื): 208 014.134 ms (ืžืขื˜ ื™ื•ืชืจ ืž-3 ื“ืงื•ืช).

ืชื•ืฆืื” ืžืขื•ืœื”.

ืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ืกืš ื”ื›ืœ

ื™ื›ื•ืœื ื• ืœืขืฆื•ืจ ืฉื.
ืื‘ืœโ€ฆ
ื”ืชื™ืื‘ื•ืŸ ื‘ื ืขื ื”ืื›ื™ืœื”. ื”ื”ื•ืœืš ื™ืฉืœื•ื˜ ื‘ื“ืจืš. ื›ืœ ืชื•ืฆืื” ื”ื™ื ื‘ื™ื ื•ื ื™ืช. ื ืขืฆืจ ื•ืžืช. ื•ื›ื•.
ื‘ื•ืื• ื ืžืฉื™ืš ื‘ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”.
ืจืขื™ื•ืŸ ืžืฆื•ื™ืŸ. ื‘ืžื™ื•ื—ื“ ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉืœืœืงื•ื— ืืคื™ืœื• ืœื ื”ื™ื” ืื›ืคืช. ื•ืืคื™ืœื• ื—ื–ืง ืขืœ ื–ื”.

ืื– ื”ื’ื™ืข ื”ื–ืžืŸ ืœืขื™ืฆื•ื‘ ืžื—ื“ืฉ ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื. ืœื ื ื™ืชืŸ ืขื•ื“ ืœื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืžื‘ื ื” ื”ืฉืื™ืœืชื” ืขืฆืžื• (ืื ื›ื™, ื›ืคื™ ืฉื”ืชื‘ืจืจ ืžืื•ื—ืจ ื™ื•ืชืจ, ื™ืฉื ื” ืืคืฉืจื•ืช ืœื”ื‘ื˜ื™ื— ืฉื”ื›ืœ ืื›ืŸ ื™ื™ื›ืฉืœ). ืื‘ืœ ืœื”ืชื—ื™ืœ ืœื™ื™ืขืœ ื•ืœืคืชื— ืืช ืขื™ืฆื•ื‘ ืžืกื“ ื”ื ืชื•ื ื™ื ื–ื” ื›ื‘ืจ ืจืขื™ื•ืŸ ืžืื•ื“ ืžื‘ื˜ื™ื—. ื•ื”ื›ื™ ื—ืฉื•ื‘ ืžืขื ื™ื™ืŸ. ืฉื•ื‘, ื–ื›ื•ืจ ืืช ื ืขื•ืจื™ืš. ื”ืจื™ ืœื ืžื™ื“ ื”ืคื›ืชื™ ืœ-DBA, ื’ื“ืœืชื™ ื›ืžืชื›ื ืช (BASIC, assembler, C, double-plus C, Oracle, plsql). ื ื•ืฉื ืžืขื ื™ื™ืŸ, ื›ืžื•ื‘ืŸ, ืœืกืคืจ ื–ื™ื›ืจื•ื ื•ืช ื ืคืจื“ ;-).
ืขื ื–ืืช, ื‘ื•ืื• ืœื ื ืกื™ื— ืืช ื“ืขืชื ื•.

ืœืคื™ื›ืš,

ืืชื” ื–ื•ื›ืจ ืื™ืš ื”ื›ืœ ื”ืชื—ื™ืœ. ื”ื›ืœ ื”ื™ื” ืคืขื ืจืืฉื•ื ื” ื•ืฉื•ื‘

ืื• ืฉืื•ืœื™ ื—ืœื•ืงื” ืชืขื–ื•ืจ ืœื ื•?
ืกืคื•ื™ืœืจ - "ื›ืŸ, ื–ื” ืขื–ืจ, ื›ื•ืœืœ ื‘ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ื‘ื™ืฆื•ืขื™ื."

ืื‘ืœ ื–ื” ืกื™ืคื•ืจ ืื—ืจ ืœื’ืžืจื™...

ื”ืžืฉืš ื™ื‘ื•ืโ€ฆ

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”