ááá¯ááá¯á¡áá»áá¯ážááŸááá±á¬áá¬áá¬ááá¯á·áááœáŸá±á·áá² áá±áá¬áá±á·á
áºááá¯á· á
á¯á¶á
ááºážáá±ážááŒááºážááŸá¯á¡áá±á¡ááœáẠ10 áááá¯ážá¡á±á¬áẠáááºááá¯á·áá¯ááºáá±á¬ááºáááºáááºážá áá»áœááºá¯ááºááá¯á·ááá±áá¬áá±á·á
áºáá
áœááºážáá±á¬ááºáááºáá»áááºážááŸá¯ááá¯áá»áœááºá¯ááºááá¯á·áááºáá²á·ááá¯á·ááá¯ááºááœááºááŒá±ááŸááºážáá²á·áááºá á¡áá¯á¶ážááŒá¯áá°áá»á¬ážáááºááá¯ááºááá»áŸáááºáá±á¬ááºááŸá¯áá±ážááá¯ááºáááºááŸáá·áºááœááºáá»ááºááŸá¯á¡áááºážá¡ááŒá
áºáá»á¬ážáá¯ááºáá»á
ááááºáááá¯ážá
á±áá² SQL queries áá»á¬ážááá¯á¡áá±á¬ááºážáá¯á¶ážááŒá
áºá¡á±á¬ááºááŒá¯áá¯ááºáá¯á¶ááá¯á·ááá¯ááŒá±á¬ááŒáá«áááºá
áá±á¬ááºáá¯ááºáá±ážáá¯áá¹ááá®áá»á¬ážááœáẠá
á®ážááœá¬ážáá±ážáá¯ááºáááºážá
ááºáá»á¬ážááᯠá
á®áá¶ááá·áºááœá²ááẠáááºáá±á¬ááºááŸá¯áá
áºáᯠááŒá¯áá¯ááºáá«áááºá áá¯áá¹ááá®áá±á«ááºáž á áá±á¬ááºáá±á¬ááºá áá»áœááºáá±á¬áºááá¯á·áá²á· á¡áá¯ááºáá¯ááºáá«áááºá áá° áá,ááá áá»á±á¬áºááẠáá»áœááºá¯ááºááá¯á·áá
áá
áºááŒáá·áº áá±á·á
áẠá-áá áá¬áá®ááŒá¬ á¡áá¯ááºáá¯ááºááŒáááºá áááºážááẠá¡á
á®á¡á
ááºáá±ážááœá²ááŒááºážá á¡áááá±ážáá»ááºá ááááá±ážáá»ááºá á¡áááºááŒá¯ááŒááºážááá¯ááºáᬠááŒá¿áá¬á¡áá»áá¯ážáá»áá¯ážááᯠááŒá±ááŸááºážáá±ážáááº... áá»áœááºá¯ááºááá¯á·ááẠPostgreSQL 3 ááᯠá¡áá¯á¶ážááŒá¯áááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá±áá¬áá±á·á
áºááœáẠááá¬áž 10 ááá·áºááŸáááŒá®áž áá±ážááœááºážáá±á«ááºáž áááºáž 4 (10 á¡áá»áá¯ážáá»áá¯áž) ááᯠáá±á·á
áẠáááºáá¶áááŸááá«áááºá áá»ááºážáá»áŸá¡á¬ážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááœáẠáá
áºá
áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááá¯áá»ááºáá±á«ááºáž á-áááá ááŸáááŒá®áž á¡áááºááŒáœáá¯á¶ážá¡áá»áááºáá»á¬ážááœáẠáá
áºá
áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááá¯áá»áẠááááá áá»á±á¬áºááŸááááºá áá±ážááœááºážá¡áá»á¬ážá
á¯ááẠOLAP ááŒá
áºáááºá áááºááá¯ážááŸá¯áá»á¬ážá ááŒá¯ááŒááºááŸá¯áá»á¬ážááŸáá·áº áá»ááºááŒááºážáá»á¬áž áááºážáá«ážáá¬áá±á¬ááŒá±á¬áá·áº OLTP load ááẠá¡áá±á¬áºáá±áž áá±á«á·áá«ážáááºá áá»áœááºá¯ááºááá¯á·áááá±á¬áá»ááºáá¡ááá¯ááºážá¡áá¬ááᯠá¡áá²ááŒááºááá¯ááºááŒá®áž áá»áœááºá¯ááºááá¯á·áá¡ááœá±á·á¡ááŒá¯á¶ááẠááá·áºá¡ááœáẠáááºáá»áŸá¡áá¯á¶ážáááºááá¯ááºáááºááᯠáá¬ážáááºááá¯ááºááẠá€áá¶áá«ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»áœááºá¯ááºáá±ážáá¬ážáá«áááºá
áá¯á¶áá áºáá¯á¶á ááá»á¬áááºáááºá
áá»áœááºá¯ááºááá¯á· ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠá
áááºáá±á¬á¡áá«á áá±áá¬áá±á·á
áºáá±á«áºá áááºááá¯á·áá±á¬ áááºáá¯ááºáááºááá¯ážáá»á¬áž áá»áá±á¬ááºáá¬áááºááᯠáá»áœááºá¯ááºááá¯á· á¡ááŸááºáááẠáááœá±ážáá²á·áááá² áá¬áá¬á០ááœá²áá°ááŒááºážááᯠáááºááœá¬ážáá«á áá»áœááºá¯ááºááá¯á· áá¬áá¯ááºáááºáááºážá áá±áá¬áá±á·á
áºááᯠáá®ááá¯ááºážááœá²áá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·ááẠáá±áá¯áá» á¡ááŒá¶ááŒá¯áá»ááºáá»á¬ážááᯠááá¯ááºáá¬ááŒá®áž ááááááá¯ááºááᯠááŒá±ááá»ááẠááŒáá¯ážá
á¬ážáá±á¬áºáááºáž "áá¯á¶á
á¶ááᯠááá¯á¶ážáá«ááŸáá·áº
áá¯á¶ááŸá áºáá¯á¶á á á¬áááºážá¡ááºáž
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááœáẠáá áºáá±á·áá»áŸáẠáá»áœááºá¯ááºááá¯á·ááá±áá¬áá±á·á áºáá±á«áºááœáẠáá¯ááºáá±á¬ááºááá·áº ááá°áá®áá±á¬áá±ážááœááºážáá±á«ááºáž 10 ááá·áºááŸááááºá ဠ10 ááœáẠáá»ááºážáá»áŸ ááœááºáá»ááºáá»ááẠ2-3 ms ááŒáá·áº á¡ááŒááẠ0.1-0.3 áááºáž ááœááºáá»ááºááá·áº áá®áá°ážáá»á¬áž ááŸáááŒá®áž áá áºáá±á·áá»áŸáẠá¡ááŒááẠ30 áá¯áá±á«áºáá±á¬ áá»ááºážáá»áŸ ááœááºáá»ááºáá»ááẠá áá¹ááá·áº 100 ááŸáá·áº á á¯á¶á ááºážááŸá¯áá»á¬áž ááŸááá«áááºá
10 queries á¡á¬ážáá¯á¶ážááᯠoptimize áá¯ááºáááºáááŒá áºááá¯ááºáá«á ááá¯á·ááŒá±á¬áá·áº database áá áœááºážáá±á¬ááºáááºááá¯ááŸááºáááºá áœá¬ááá¯ážáááºá á±áááºá¡ááœááºáá»áœááºá¯ááºááá¯á·áááŒáá¯ážáááºážá¡á¬ážáá¯ááºááŸá¯áá»á¬ážááá¯áááºááá·áºáá±áá¬ááœááºááœáŸááºááŒá¬ážááááºááá¯ááŸá¬ááœá±áááºáá¯á¶ážááŒááºáá²á·áááºá á¡ááŒáááºááŒáááºááŒááºáá¯ááºááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááŒá Ạááœá²á ááŒá¯áá¬áááºá
ááááºáááºážáá±á¬ááºážááá¯ááŸá¯áá»á¬áž
á€á¡áá¬áá»á¬ážááẠá¡áá»áááºá¡áá»á¬ážáá¯á¶áž (á á¯á á¯áá±á«ááºážá¡áá»áááº) ááŒá¬áá±á¬ á¡áá±ážáá¯á¶ážáá±ážááœááºážáá»á¬ážááŒá áºáááºá áááºážááá¯á·ááẠáááŒá¬áá áá±á«áºáá±á«áºáá±á¬ áá±ážááœááºážáá»á¬áž ááá¯á·ááá¯áẠáá¯ááºáá±á¬ááºááẠá¡ááœááºááŒá¬áá±á¬ á á¯á¶á ááºážáá±ážááŒááºážááŸá¯áá»á¬ážááŒá áºááẠ(á¡ááŒá¬ááŒá®ážááŸáá·áº áááŒá¬áá áá±ážááŒááºážááŸá¯áá»á¬ážááẠááŒááºááŸá¯ááºážá¡ááœáẠááá¯ááºááœá²á áááá¡ááŒááẠáááºáá»á±á¬á·ááŸá¯ááœáẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážáááº)á ááááºá¡áá±ááŒáá·áºá áá¬áá¬ááẠáááºážááá¯á·ááá¯ááºáá±á¬ááºááŸá¯ááœáẠá¡áá»áááºá¡áá»á¬ážáá¯á¶ážááŒá¯ááºážáááºá ááá¯á·á¡ááŒááºá ááááºáááºážáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠá á¯á á¯áá±á«ááºážáá¯ááºáá±á¬ááºáá»áááºááŸáá·áº IO á¡áá»ááẠáá®ážááŒá¬ážá á®ááœá²ááŒá¬ážááẠá¡áá±ážááŒá®ážáá«áááºá ááá¯ááá¯á·áá±á¬áá±ážááœááºážáá»á¬ážááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááẠáááºážáááºážáá»á¬ážááẠá¡áááºážáááºááœá²ááŒá¬ážáá«áááºá
áá¯áá¹ááá®á¡á¬ážáá¯á¶ážá áá¯á¶ááŸááºá¡áá±á·á¡áá»áá·áºááŸá¬ TOP áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááŒááºážááŒá
áºáááºá áááºážááá¯á·áá²á០á¡áááºážáááºáᬠááŸááá«áááºá á
á¯á¶á
ááºážááŸá¯áá
áºáá¯áááºáá»áŸáẠá¡áá±á¬ááºážáá¯á¶ážááŒá
áºá¡á±á¬áẠááŒá¯áá¯ááºááŒááºážááŒáá·áº á¡áááºážá¡ááŒá
áºáá»á¬ážá 5-10% ááᯠááœááºáááºážá
á±ááá¯ááºáááºá ááá¯á·áá±á¬áºá ááá±á¬áá»ááºááŒá®ážáá¬áááºááŸáá·áºá¡áá»áŸá ááááºáááºážáá±ážááœááºážáá»á¬ážááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážááẠááá¯áá¡áá±ážá¡ááœá²ááá¯ááºáá±á¬ á¡áá¯ááºááŒá
áºáá¬áááºá ááá¯ážááŸááºážáá±á¬áááºážáááºážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®ážááŒá
áºááŒá®ážá á¡ááœááºáá±ážáá¶áá±á¬áá±á¬ááºážááá¯áá»ááºááẠá¡áááºážá¡ááŒá
áºáá»á¬ážá 3-5% ááá¯áᬠááá°áááºá á
á¯á
á¯áá±á«ááºáž TOP queries ááẠá¡áá»áááºá 30-40% áááºáááºážáá«áá áááºážááá¯á·ááᯠáá»ááºááŒááºá
áœá¬ áá¯ááºáá±á¬ááºááá¯ááºá
á±ááẠááẠá¡á¬ážáá¯ááºáá¬ážááŒá®ážáá¬áž ááŒá
áºááá¯ááºááŒá®áž áá±á¬ááºá¡á¯ááºá
á¯á០áá±ážááŒááºážáá»ááºáá»á¬ážááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá
áºá¡á±á¬áẠáááºáááºáá¯ááºáá±á¬ááºááẠá¡áá»áááºáááºááŒá®ááŒá
áºáááºá
á€á¡ááœá²á·ááœáẠááááºáááºážáá±ážááœááºážáá»á¬áž áááºáá»áŸáá«áááºááá·áºáááºááá¯ááá·áºáá±ážááœááºážááᯠááŒá±áááºáá»ááºáá±áá±ážáááºá áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº á¡áááºážáá¯á¶áž 10 áá°áá±á¬áºáááºáž 20 áááºáááá¯áá«á TOP á¡ááœá²á·ááœáẠáááá¡ááŒáááºááŸáá·áº áá±á¬ááºáá¯á¶ážá¡áá»áááºááẠ10 ááŒáááºááẠáááá¯ááŒá±á¬ááºáž áá±áá»á¬á
á±ááẠááŒáá¯ážá
á¬ážáá«áááºá ááá¯ááá¯áááºááŸá¬á query execution time ááẠ1st á០10th ááá¯á· áááááá¬áá¬áá»áááºážááœá¬ážáá«áá drop ááẠáááŒááºážááŒááºážááá¯áá¬áá«áá group size ááᯠ10 ááá¯á·ááá¯áẠ15 ááá¯á·ááá¯ážá TOP-20 ááá¯áá°áá«áááºá
ááẠááá¬áž
á€á¡áá¬áá»á¬ážááẠáá±á¬ááºáá¯á¶áž 5-10% ááŸááœá²á TOP ááŒá®ážáá±á¬áẠáá»ááºáá»ááºážáá±á¬ááºáá¬áá±á¬ áá±á¬ááºážááá¯áá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááŒá áºáááºá á¡áá»á¬ážá¡á¬ážááŒáá·áºá á€áá±ážááœááºážáá»á¬ážááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážááẠáá¬áá¬á áœááºážáá±á¬ááºáááºááᯠáá»á¬ážá áœá¬ááŒáŸáá·áºáááºááẠá¡ááœáá·áºá¡áááºážááŒá áºáááºá á€áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááẠ80% á¡áá á¡áá±ážáá»áááºááŸáááá¯ááºáááºá áá«áá±ááá·áº áá°ááá¯á·áá²á·ááŸááºáá¬áᬠ50% áá»á±á¬áºááœááºááœá¬ážáááºáá±á¬ááºá០áá°ááá¯á·ááᯠááá¯ááŒá®ážáá±áá»á¬ááŒáá·áºááá¯á· á¡áá»áááºáááºáá«ááŒá®á
á¡ááŒá®áž
áá±á¬áºááŒáá²á·ááá·áºá¡ááá¯ááºážá á€áá±ážááœááºážáá»á¬ážááẠá¡áá¯á¶ážááœááºáá±á¬ááºáá¬ááŒá®áž á¡áá»áááºá 5-10% áá°áááºá á¡ááá¯á¡áá»á±á¬áẠáá±ážááŒááºážááŸá¯ ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážáááŒá¯áá«á áááºážááá¯á·ááᯠáá±á·áá¬ážááá¯ááºááŒá®áž áááºážááá¯á·ááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯ááŒááºááŒááºážáááºáááºáž á á»á±ážáááºáá¬áá«áááºá
á¡á¯ááºá á¯áá áºáá¯á á®ááᯠáááºááá¯á¡áá²ááŒááºááá²á
PostgreSQL á¡ááœáẠááá¯ááá¯á·áá±á¬ á¡áá²ááŒááºááŸá¯ááᯠáá°áá®áá±ážáá±á¬ SQL query ááᯠáá»áœááºá¯ááºá¡áá¯á¶ážááŒá¯ááẠ(áá»áœááºá¯ááºááẠá¡ááŒá¬áž DBMSs áá»á¬ážá áœá¬á¡ááœáẠá¡áá¬ážáá° query áá áºáá¯ááᯠáá±ážáá¬ážááá¯ááºáááºááŸá¬ áá±áá»á¬áá«áááº)
TOP-MEDIUM-TAIL á¡ááœá²á·áá»á¬ážá á¡ááœááºá¡á á¬ážááᯠááá·áºááŸááºážááẠSQL query
SELECT sum(time_top) AS sum_top, sum(time_medium) AS sum_medium, sum(time_tail) AS sum_tail
FROM
(
SELECT CASE WHEN rn <= 20 THEN tt_percent ELSE 0 END AS time_top,
CASE WHEN rn > 20 AND rn <= 800 THEN tt_percent ELSE 0 END AS time_medium,
CASE WHEN rn > 800 THEN tt_percent ELSE 0 END AS time_tail
FROM (
SELECT total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query,
ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn
FROM pg_stat_statements
ORDER BY total_time DESC
) AS t
)
AS ts
áá±ážááŒááºážááŸá¯áááááºááẠáá±á¬áºáá¶áá¯á¶ážáá¯ááŒá áºááŒá®áž áá áºáá¯á á®ááœáẠá€á¡ááœá²á·ááŸáá±ážááŒááºážáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠá¡áá»áááºáá¬ááá¯ááºááŸá¯ááºážáá»á¬ážáá«ááŸááááºá áá±á¬ááºážááá¯áá»ááºá¡ááœááºážááœáẠá¡á¯ááºá á¯áá áºáá¯á០á¡ááŒá¬ážáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠááœá²áá¯ááºááá·áº áá¶áá«áẠ(20 ááŸáá·áº 800) ááœáẠáá¶áá«ááºááŸá áºáá¯ááŸááááºá
ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážáá¯ááºáááºážá ááá·áºá¡áá»áááºááŸáá·áº ááá¯á¡áá»áááºááœáẠáá±á¬ááºážááá¯ááŸá¯áá»á¬ážáááŸááºáá¬áá»á¬ážááᯠá¡ááŒááºážáá»ááºážááŸáá¯ááºážááŸááºáá¯á¶ááŒá áºáááºá
TOP áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá áá±á
á¯ááẠáááááá¬áᬠáá»á±á¬á·áá»ááœá¬ážááŒá±á¬ááºáž áá¯á¶ááŒááºážááœáẠááŒááá¬ážáá±á¬áºáááºáž âá¡áááºá¡ááẠáá±á¬ááºáá°áááºááá¬ážáá»á¬ážâ ááá¯ážáá¬áá«áááºá
á¡á
ááá¯ááºážááœááºá ááááºáááºážáá±á¬ááºážááá¯áá»ááºáá»á¬ážááœáẠááŒá±á¬ááºááŒá±á¬ááºáááºážáááºáž á¡ááŸá¬ážá¡ááœááºážáá»á¬áž áá«áááºáááºá á¡áá»áááºááŒá¬áá¬áááºááŸáá·áºá¡áá»áŸá ááá±ážáááá±á¬áá«áá»á¬áž áá»á±á¬ááºááœááºááœá¬ážáᬠTOP áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááá±á
á¯ááŸá¬ áá»á±á¬á·áááºážáá¬ááŒá®áž áááºáá²áá±á¬áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠá¡ááŸáááºááŒáŸáá·áºááẠááá¯áááá¯á ááŒáá¯ážá
á¬ážá¡á¬ážáá¯ááºááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá²á·ááááºá
áá±á¬ááºážááá¯áá»ááºáá»á¬ážáá á¬áá¬ážááá¯áááŸááááºáá»áœááºá¯ááºááá¯á·áááºá¡á±á¬ááºáá«áá±á¬ááºážááá¯áá»ááºááá¯á¡áá¯á¶ážááŒá¯áááºá
SELECT * FROM (
SELECT ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn, total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query
FROM pg_stat_statements
ORDER BY total_time DESC
) AS T
WHERE
rn <= 20 -- TOP
-- rn > 20 AND rn <= 800 -- MEDIUM
-- rn > 800 -- TAIL
á€áááºááŸá¬ ááááºáááºážáá±ážááœááºážáá»á¬ážááᯠá¡ááŸáááºááŒáŸáá·áºááẠáá°áá®áá±ážáá±á¬ á¡áá¯á¶ážá¡áá»á¬ážáá¯á¶ážáááºážááá¬áá»á¬ážá á¬áááºážááŒá áºáááº-
- á áá áºá ááŒááºáááºáá®ááá¯ááºážááœá²ááŒááºáž á¥ááá¬á áá±áá¬áá±á·á áºááá¯á· á¡áá»áááºá¡áá«á¡ááá¯áẠáá±ážááŒááºážááŸá¯áá»á¬ážá¡á á¬áž áááºáá±á·áá»áºááœá²á á¬ážááᯠá¡áá¯á¶ážááŒá¯á á¡áááá±ážáá»ááºáá¯áá¹ááááᯠááŒááºáááºáá¯ááºáá±á¬ááºááŒááºáž
- á¡ááœáŸááºážáá»á¬ážááá·áºááŒááºáž ááá¯á·ááá¯áẠááŒá±á¬ááºážáá²ááŒááºážá
- ORM áá±ážááœááºážáá»á¬ážááᯠá ááºá á ẠSQL ááá¯á· ááŒááºáááºáá±ážáá¬ážááŒááºážá
- áá»ááºážáááá±á¬áá±áá¬ááᯠááŒááºáá±ážááŒááºážááẠáá¯áá¹áááá±áááá¯ááœáá·áºááŒááºážá
- áá±áá¬áá¯á¶ááŸááºááá¯ááºááŒááºážááŸáááá·áº ááááºážáááºážááŒááºáž á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠááá¬ážáá»áááºáááºááŸá¯ Delivery -> Invoice -> Request -> Application ááŸááááºá ááá¯ááá¯áááºááŸá¬ áá±ážááá¯á·ááŸá¯áá áºáá¯á á®ááẠá¡ááŒá¬ážááá¬ážáá»á¬ážááŸáá áºááá·áº á¡ááºááºáá áºáá¯ááŸáá·áº áááºá ááºáá±áááºá áá±á¬ááºážááá¯áá»ááºáá áºáá¯á á®ááŸá ááá¬ážá¡á¬ážáá¯á¶ážááᯠááá·áºááºááá»áááºá á±áááºá áá»áœááºá¯ááºááá¯á·ááẠáá±ážááá¯á·ááŸá¯ááá¬ážááŸá áá±á¬ááºážááá¯áá»ááºááŸáá·áº ááá·áºááºááᯠáááá¹áá°ááœá¬ážáá¬ážáááºá
- á¡ááá¯ážá¡áá¬ážá á¬á¡á¯ááºáá»á¬ážááŒáá·áº ááŒáááºááá¬ážáá»á¬ážááᯠááááºážáááºážáá¬ážááŒá®áž áááá¯ááááºááŸááºáá¬ááºááœáẠááá¬ážáá»á¬ážááᯠááŒá±á¬ááºážáá²áá²áá«áááºá
ááá«ááá¶ááœáẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááẠá¡áááºááŒá®ážáá±á¬ááºá áᬠáá®ááá¯ááºážá¡áá áºáá áºáá¯ááŒá áºáá±á¬áºáááºáž áááºážááá¯á·ááẠá áá áºáááºá 5-10% ááᯠáá¶á·ááá¯ážáá±ážááŒá®áž áá»áŸááá«áááºá á¡áá»áááºááŒá¬áá¬áááºááŸáá·áºá¡áá»áŸá á¡áááºáá±á¬ááẠáá±ážáááºáá¬ááŒá®áž áá±ážáááºáá¬ááŒá®áž áá®ááá¯ááºážááŒááºááẠáááºážáá áºááẠááá¯á¡ááºáá¬áááºá
á¡á²áá®áá±á¬áẠáá¯ááááá±á¬ááºážááá¯áá»ááºááŒá áºáá²á· á¡áááºáááºážáá±á¬ááºáá°áááºááá¬ážá¡á¯ááºá á¯ááᯠá¡á¬áá¯á¶á áá¯ááºáá²á·áááºá áááºážááœáẠáá±á¬ááºáááºáá±ážááœááºážáá»á¬ážá áœá¬ááŸáááŒá®áž á¡á¯ááºá á¯áá áºáá¯áá¯á¶ážááᯠááœá²ááŒááºážá áááºááŒá¬ááẠá¡áá»áááºáá»á¬ážá áœá¬áá°ááááºáᯠáááºááááºá ááá¯á·áá±á¬áºá áá±ážááŒááºážááŸá¯á¡áá»á¬ážá á¯ááẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬ááºááŒá¯áá¯ááºááẠá¡ááœááºááá¯ážááŸááºážááŒá®áž ááŒá¿áá¬áá»á¬ážá áœá¬ááᯠááá°áá®áá±á¬áá¯á¶á á¶áá»á¬ážááŒáá·áº á¡ááŒáááºáá±á«ááºážáá»á¬ážá áœá¬ áááºáá«ááá²áá² ááŒá¯áá¯ááºáá²á·ááŒáááºá á€áááºááŸá¬ á¡áá¬ážáá°áá±ážááœááºážáá»á¬ážá áœá¬á¡ááœáẠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá²á·ááá·áº áá¯á¶ááŸááºáá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯á¡áá»áá¯á·áááá°áá¬áá»á¬ážááŒá áºááŒá®áž ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáá±á¬áá±ážááœááºážá¡á¯ááºá á¯áá áºáá¯á á®ááẠáá±áá¬áá±á·á áºááᯠ3-5% ááŒáá·áº ááŒá¯ááºáá»áá²á·áááºá
- COUNT ááŸáá·áº ááá¬ážá¡ááŒáá·áºá áááºááºááᯠá¡áá¯á¶ážááŒá¯á ááŸááºáááºážáá»á¬ážááŸááá±ááŒááºážááᯠá á áºáá±ážááá·áºá¡á á¬áž EXISTS ááᯠá áááºá¡áá¯á¶ážááŒá¯áááº
- ááœá²ááŒá¬ážááŸá¯ááᯠáááºááŸá¬ážááá¯ááºááẠ(áá±áá¯áá» á
á¬ááœááºáááŸááá±á¬áºáááºáž áá
áºáá«áá
áºáᶠáá±á¬ááºážááá¯ááŸá¯ááᯠá¡ááŒááẠ10-100 á¡ááŸáááºááŒáŸáá·áºááŒááºážááŒáá·áº á¡ááœááºááá° áááºááŸá¬ážááá¯ááºáááº)á
á¥ááá¬á¡á¬ážááŒáá·áºá ááá¯á·áá±á¬ááºááŸá¯ááá¬ážááŒá®ážáá áºáá¯á០áá¬ááºáá±á¬ááºážá¡á¬ážáá¯á¶ážááᯠááœá±ážáá»ááºááẠquery áá áºáá¯á¡á á¬áž (DELIVERY)
SELECT DISTINCT P.ID, P.FIRST_NAME, P.LAST_NAME FROM DELIVERY D JOIN PERSON P ON D.DRIVER_ID = P.ID
á¡áá±á¬áºáá±ážáá±ážáááºáá±á¬ PERSON á á¬ážááœá²áá±á«áºááœáẠá á¯á¶á ááºážááŸá¯áá áºáᯠááŒá¯áá¯ááºáá²á·áááºá
SELECT P.ID, P.FIRST_NAME, P.LAST_NAME FROM PERSON WHERE EXISTS(SELECT D.ID FROM DELIVERY WHERE D.DRIVER_ID = P.ID)
áá»áœááºá¯ááºááá¯á·ááẠáááºá ááºáááºááœááºáá±á¬ subquery ááá¯á¡áá¯á¶ážááŒá¯áá¬ážáá¯á¶ááá±á¬áºáááºáž áááºážááẠ10 ááááºááá¯ááá¯ááŒááºáááºá á±áááºá
- áá»á¬ážá
áœá¬áá±á¬ ááá
á¹á
áá»á¬ážááœááºá COUNT ááᯠáá¯á¶ážáá¯á¶ážááŸáá·áº á
áœáá·áºáá
áºáá²á·áááºá
á¡áá®ážá ááºáá¯á¶ážáááºááá¯ážááᯠááœááºáá»ááºááŒááºážááŒáá·áº á¡á á¬ážááá¯ážáááºá - á¡á
á¬áž
UPPER(s) LIKE JOHN%â
á¡áá¯á¶áž
s ILIKE âJohn%â
áá®ážááŒá¬ážáá±á¬ááºážááá¯ááŸá¯áá áºáá¯á á®ááẠáá áºáá«áá áºáᶠ3-1000 ááŒááẠá¡ááŸáááºááŒáŸáá·áºáá²á·áááºá á¡áááºááŒá®ážáá±á¬ááºá áᬠá áœááºážáá±á¬ááºáááºááŸááá±á¬áºáááºážá ááááá±á¬á· 10 ms ááŒá¬ááŒáá·áºáá±á¬ query ááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬ááºáá¯ááºááẠá¡ááŒá±á¬ááºážáááŸááááá¯á 3rd ááᬠá¡áá±ážáá¯á¶ážáá±ážááœááºážáá»á¬ážáá²á០áá áºáá¯ááŒá áºááŒá®áž áá±áá¬áá±á·á áºáááºáá»áááºá á¯á á¯áá±á«ááºážá áá¬ááá¯ááºááŸá¯ááºáž áá¬áá»á®á¡áá áá±áá¬áá°áá«áááºá ááá¯á·áá±á¬áº áá°áá®áá±á¬ á á¬ááœááºááᯠá¡áá»áá¯ážá¡á á¬ážáá° áá±ážááŒááºážáá»ááºá¡á¯ááºá á¯ááœáẠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áá¬ááá¯ááºááŸá¯ááºážá¡áááºážááẠááŒááºáááŸááá²á·áááºá áá±ážááœááºážáá¬áá±á«ááºážáá»á¬ážá áœá¬ááᯠááá¯ááºááá¯ááºááŒááºáááºáá¯á¶ážáááºááŒá®áž á¡áá»áááºáááŒá¯ááºážá á±áááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá»áá¯ážá¡á á¬ážáá°áá®áá±á¬áá±ážááœááºážáá»á¬ážááá¯ááŸá¬ááœá±ááẠáá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááá·áº ááá¯ážááŸááºážáá±á¬ script á¡áá»á¬ážá¡ááŒá¬ážááᯠáá±ážáá¬ážáá²á·áááºá ááááºá¡áá±ááŒáá·áºá á á¯á¶á ááºážáá±ážááŒááºážááá·áºá¡á¯ááºá á¯áá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬ááºááŸá¬ááœá±ááŒááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž áá»áá¯ážááœá¶á áœá¬á¡á¬ážáá¯ááºááŒááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·áá áœááºážáá±á¬ááºáááºááᯠááá¯ááá¯ááá¯ážáááºá á±áá«áááºá
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá°áá®áá±á¬ áá¬á·ááºáá²ááᯠáá¯ááºáá±á¬ááºáá±áááºááŸá¬ áá¯á¶ážááŸá áºááŸáááŒá®ááŒá áºáááºá áá»ááºážáá»áŸáá±á·á ááºáááºááẠ30% ááá·áºááŒá áºááŒá®áž á¡ááŒáá·áºáá¯á¶ážááœáẠ70% ááŸááááºá áá±á¬ááºážááá¯ááŸá¯á¡áá±á¡ááœááºááŸáá·áº áá¯á¶ážá áœá²áá°á¡áá±á¡ááœááºááẠáá áááá·áº ááá¯ážáá¬áá²á·áááºá TOP-MEDIUM áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá á€áá°áá®áá±á¬á¡á¯ááºá á¯áá»á¬ážááᯠá ááºáááºáááŒááºá á±á¬áá·áºááŒáá·áºáá±ážáá±á¬ááŒá±á¬áá·áº á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá»á±ážáá°ážáááºáá«áááºá TOP á¡ááœá²á·ááœáẠáá±á¬ááºážááá¯áá»ááºá¡áá áºáá áºáᯠáá±á«áºáá¬áááºááŸáá·áº áá»ááºáá»ááºážááá¯áááᯠáááºážááᯠááá¯ááºážááŒá¬ážá áááºááŒá¬ááŒá®áž á¡ááŸáááºááŒáŸáá·áºááẠááŒáá¯ážá á¬ážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠá á¯á¶á ááºážááŸá¯ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ scripts áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá áºáááºáá»áŸáẠáá áºááŒááẠMEDIUM á¡ááœá²á·á¡á¬áž ááŒááºáááºáá¯á¶ážáááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬ááºáá¯ááºáááºážááᯠáááá¬ážááŒá®ážááŒá áºááá·áº áá±ážááœááºážá¡áá áºáá»á¬ážááᯠááœá±á·áá«á áááºážááá¯á·ááᯠá¡ááŒááºááŒá±á¬ááºážáá«á áá áºáá«ááá¶ááœáẠáá±ážááœááºážáá»á¬ážá áœá¬ááᯠáá áºááŒáá¯ááºááẠá¡áá¯á¶ážáá»ááá¯ááºáá±á¬ ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºááá¯ááºááá·áº áááºážáááºážá¡áá áºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· ááŸá¬ááœá±ááœá±á·ááŸááá«áááºá
áá»áœááºá¯ááºááá¯á·áááá·áºááŸááºážáá»ááºáá»á¬ážá¡áá áááºááŸááá¬áá¬ááẠá¡áá¯á¶ážááŒá¯áá°á¡áá±á¡ááœááºááᯠáá±á¬ááºááẠ3-5 á ááá¯ážáá¬ááŸá¯ááᯠáá¶ááá¯ááºáááºááŸááááºááŒá
áºáááºá ááŸááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá±á¬ááºááẠace áá
áºáá¯ááŸáááẠ- á¡ááŒá¶ááŒá¯áá¬ážááá·áºá¡ááá¯ááºáž ááŸááºááá¯á· SELECT áá±ážááœááºážáá»á¬ážááᯠáááœáŸá²ááŒá±á¬ááºážááá±ážáá«á ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠá€á¡áá¬ááᯠáááááŸáááŸáááá¯ááºáá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠâáá±ážáá¶áá±á¬á¡ááŒá±á¬ááºáá»á¬ážâ ááá¯áááœáá·áºáá® âá
áááºâ ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážáááŒá
áºááá¯ááºáá»á±áá»á¬ážááᯠáŠážá
áœá¬áá¯ááºáá¯á¶ážááá¯áá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá
ááŒá®ážáá²á·áá±á¬á¡áá¯ááºá¡á¬áž áá±áááºááá¯ááºážááŒá¬ážááŒáá·áºááŒááºážááŒáá·áº áá±á«ááºááá¯ááºá
áá±ážááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯ááá¯ááºáááºá áá»áœááºážáá»ááºáá°áá»á¬ážáá¡áá»áááºááá¯ááŒá¯ááºážáá®ážááá·áºá¡á
á¬áž ááá¯ááá¯á¡á¬ážáá±á¬ááºážáá±á¬áá¬áá¬ááá¯áááºáá«á á¡áá°ážáááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠáá±á«ááºááá¯ááºá
áá±ážáá»á²á·ááŒááºážá ááá·áºáááºáá»ááºáá»á¬ážááᯠááá¯ááºáá¯á¶ážáá±ážáá±á¬ááŒá±á¬áá·áº áá¬áá¬ááẠááá¯áá»áŸáá±á¬áẠáá¯ááºáá»áááºááá¯ááºáá«á ááá¯á·áá±á¬áº áá±á¬ááºážááá¯ááŸá¯á¡áá±á¡ááœááºááẠáá ááá¬ááá¯ážáá¬áááºá ááŸá
áºáá»á¬ážá
áœá¬ááŒá¬áá¬áááºááŸáá·áºá¡áá»áŸá á
áá
áºááá¯ááºáá±á¬ááºááá¯ááºá
áœááºážááẠááá¯ážáááºáá¬áá²á·ááŒá®áž ááá¯á¡áá« áá±á¬ááºážááá¯ááŸá¯á¡áá»áá¯ážá¡á
á¬ážáá»á¬áž ááá¯ááá¯áá»á¬ážááŒá¬ážáá¬áá«áááºá áááºááŸáºáá¯ááºááŒááºážááŒá±á¬áá·áº áááºááŸááá±áá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá
áœááºážááᯠáá±á¬ááºážááá¯ááŸá¯áááºážáá«ážááŒá®áž ááá¯ááá¯áááá±á¬ááºáá±á¬ áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááœáẠáá¯ááºáá±á¬ááºáá«áááºá ááá¯ááá¯áááºááŸá¬ á
á
áºááŸááºáá±á¬ acceleration coefficient ááá¯áááŸáááẠá¡ááŒá¬áž 10 ááŸáá·áº áá¯á¶ááŒá¯á¶á
áœá¬ ááŒáŸá±á¬ááºááá¯ááºáááºáᯠááá¯ááá¯áááºá ááá¯á·ááŒá±á¬áá·áº ááŸá±ážááá¯ážáááºáá±á¬ ááá·áºááŸááºážáá»ááºáá»á¬ážá¡áá á¡ááŸáááºááẠá¡á á
á ááá¯á·ááá¯áẠááá¯á·áááºááá¯áááºáᯠááá¯ááá¯ááºáááºá áá¬áá¬ááᯠáá±á«ááºááá¯áẠááŸáá·áºááŒááºážááẠá¡á á
á ááá¯áá¯ááºáá»áááºá á¡áá°ážáááŒáá·áº optimization ááá¯áá¯ááºáá±á¬ááºááŒá®ážáááºááŸáá·áºá¡áá»áááºááá¯ááºážá¡áá¯ááºáá¯ááºáááºááŸáá·áºááŸá¬ážáááºážáá¬ážáá±á¬áá¬áá¬á¡ááœááºááœá±áá±á¬ááºážáá¶ááœáŸá¬áááºáá
ááºáá¬áá«áááºá
source: www.habr.com