PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рдЖрдзрд╛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣рдордиреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛.рдЯреЗрдВрд╕рд░.рдЖрд░рдпреВ - рдЬрдирддрд╛ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдПред

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЛрдВ рдореЗрдВ рд╣рдордиреЗ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ PGConf.Russia 2020 рдХреА рд░рд┐рдкреЛрд░реНрдЯ, рд╕рд╛рд░рд╛рдВрд╢ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдкрд░ рд▓реЗрдЦ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рджреЗрддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХрддреНрд░ рдХреА рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦрд╛ред

рдФрд░ рдЕрдм рд╣рдо рдЖрдкрдХреЛ рдЙрди рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рднрд┐рдиреНрди рдпреЛрдЬрдирд╛ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

рд▓реЙрдЧ рд╕реЗ рдпреЛрдЬрдирд╛, рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде

рд╕реАрдзреЗ рдХрдВрд╕реЛрд▓ рд╕реЗ, рд╣рдо рдкреВрд░реЗ рдмреНрд▓реЙрдХ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд▓рд╛рдЗрди рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдкреНрд░рд╢реНрди рдкрд╛рда, рд╕рднреА рдкреНрд░рдореБрдЦ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде:

        Query Text: INSERT INTO  dicquery_20200604  VALUES ($1.*) ON CONFLICT (query)
                           DO NOTHING;
        Insert on dicquery_20200604  (cost=0.00..0.05 rows=1 width=52) (actual time=40.376..40.376 rows=0 loops=1)
          Conflict Resolution: NOTHING
          Conflict Arbiter Indexes: dicquery_20200604_pkey
          Tuples Inserted: 1
          Conflicting Tuples: 0
          Buffers: shared hit=9 read=1 dirtied=1
          ->  Result  (cost=0.00..0.05 rows=1 width=52) (actual time=0.001..0.001 rows=1 loops=1)

... рдФрд░ рдХреБрдЫ рднреА рдЕрд▓рдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЙрдкреА рдХреА рдЧрдИ рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рд╕реАрдзреЗ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВ:

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░, рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмреЛрдирд╕ рднреА рдорд┐рд▓рддрд╛ рд╣реИ рд╕рдВрджрд░реНрдн рдЯреИрдм, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдЗрд╕рдХреА рд╕рднреА рдорд╣рд┐рдорд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рдЬреЗрдПрд╕рдУрдПрди рдФрд░ рд╡рд╛рдИрдПрдПрдордПрд▓

EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)
SELECT * FROM pg_class;

"[
  {
    "Plan": {
      "Node Type": "Seq Scan",
      "Parallel Aware": false,
      "Relation Name": "pg_class",
      "Alias": "pg_class",
      "Startup Cost": 0.00,
      "Total Cost": 1336.20,
      "Plan Rows": 13804,
      "Plan Width": 539,
      "Actual Startup Time": 0.006,
      "Actual Total Time": 1.838,
      "Actual Rows": 10266,
      "Actual Loops": 1,
      "Shared Hit Blocks": 646,
      "Shared Read Blocks": 0,
      "Shared Dirtied Blocks": 0,
      "Shared Written Blocks": 0,
      "Local Hit Blocks": 0,
      "Local Read Blocks": 0,
      "Local Dirtied Blocks": 0,
      "Local Written Blocks": 0,
      "Temp Read Blocks": 0,
      "Temp Written Blocks": 0
    },
    "Planning Time": 5.135,
    "Triggers": [
    ],
    "Execution Time": 2.389
  }
]"

рдмрд╛рд╣рд░реА рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рднреА, pgAdmin рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдмрд┐рдирд╛ - рд╣рдо рдЙрд╕реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ, рдЖрдЙрдЯрдкреБрдЯ рд╕реБрдВрджрд░рддрд╛ рд╣реИ:

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рдЙрдиреНрдирдд рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди

рдпреЛрдЬрдирд╛ рд╕рдордп / рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп

рдЕрдм рдЖрдк рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рдХрд╣рд╛рдБ рдЧрдпрд╛:

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рдЖрдИ/рдУ рдЯрд╛рдЗрдорд┐рдВрдЧ

рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдврд╝рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рд╣реИред

рдпрд╣рд╛рдБ рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛:рдУрд╣, рд╢рд╛рдпрдж, рдЙрд╕ рд╕рдордп рд╕рд░реНрд╡рд░ рдкрд░ рдбрд┐рд╕реНрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╛рд░рд┐рдд рдереА, рдЗрд╕реАрд▓рд┐рдП рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдореЗрдВ рдЗрддрдирд╛ рд╕рдордп рд▓рдЧрд╛!"рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдмрд╣реБрдд рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИ тАж

рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдордЬрд╝рдмреВрддреА рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреАрдЬреА рд╕рд░реНрд╡рд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рд╣реИрдВ track_io_timing:

рд╕рдордпрдмрджреНрдз I/O рд╕рдВрдЪрд╛рд▓рди рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдзреАрдорд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╕рдордп рдХреЗ рдКрдкрд░реА рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП pg_test_timing рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред I/O рдЖрдБрдХрдбрд╝реЗ pg_stat_database рджреГрд╢реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, EXPLAIN рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ (рдЬрдм BUFFERS рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ pg_stat_statements рджреГрд╢реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред

рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕реНрдерд╛рдиреАрдп рд╕рддреНрд░ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

SET track_io_timing = TRUE;

рдЦреИрд░, рдЕрдм рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╡реГрдХреНрд╖ рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ рд╣реИ:

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рдпрд╣рд╛рдБ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ 0.790ms рдореЗрдВ рд╕реЗ, 0.718ms рдиреЗ рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдкреГрд╖реНрда рдХреЛ рдкрдврд╝рд╛, 0.044ms - рдЗрд╕реЗ рд▓рд┐рдЦрд╛, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЙрдкрдпреЛрдЧреА рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдХреЗрд╡рд▓ 0.028ms рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛!

PostgreSQL 13 рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдп

рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рдВрдкреВрд░реНрдг рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд▓реЗрдЦ рдореЗрдВ, рдФрд░ рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпреЛрдЬрдирд╛ рдмрдлрд╝рд░реНрд╕

рдЕрдиреБрд╕реВрдЪрдХ рдХреЛ рдЖрдмрдВрдЯрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрди pg_stat_statements рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рджреВрд╕рд░реЗ рдкреИрдЪ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдмрдлрд╝рд░реНрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдЦреНрдпрд╛ рдпреЛрдЬрдирд╛ рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдмрдлрд╝рд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧреА:

 Seq Scan on pg_class (actual rows=386 loops=1)
   Buffers: shared hit=9 read=4
 Planning Time: 0.782 ms
   Buffers: shared hit=103 read=11
 Execution Time: 0.219 ms

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЫрдБрдЯрд╛рдИ

рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдХрдИ рдЪрд╛рдмрд┐рдпреЛрдВ (k1, k2, k3тАж) рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдкреНрд▓рд╛рдирд░ рдЕрдм рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдХреБрдВрдЬрд┐рдпреЛрдВ (рдЬреИрд╕реЗ k1 рдФрд░ k2) рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ k1 рдФрд░ k2 рдХреЗ рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд░рдорд┐рдХ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдВрдЬреА k3 рджреНрд╡рд╛рд░рд╛ "рдкреБрдирдГ рдХреНрд░рдордмрджреНрдз" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдВрдкреВрд░реНрдг рдЫрдБрдЯрд╛рдИ рдПрдХ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреА рдХреНрд░рдорд┐рдХ рдЫрдБрдЯрд╛рдИ рдореЗрдВ рдЯреВрдЯ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╕рднреА рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдкреВрд░реНрдг рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓рд╛ рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИред

 Incremental Sort (actual rows=2949857 loops=1)
   Sort Key: ticket_no, passenger_id
   Presorted Key: ticket_no
   Full-sort Groups: 92184 Sort Method: quicksort Memory: avg=31kB peak=31kB
   ->  Index Scan using tickets_pkey on tickets (actual rows=2949857 loops=1)
 Planning Time: 2.137 ms
 Execution Time: 2230.019 ms

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛
PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рдпреВрдЖрдИ/рдпреВрдПрдХреНрд╕ рд╕реБрдзрд╛рд░

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣рд░ рдЬрдЧрд╣ рд╣реИрдВ!

рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдЯреИрдм рдкрд░ рдЬрд▓реНрджреА рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдЯреИрдм рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрдВ рдЯреИрдм рдХреА рдкреВрд░реА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдЧрд╣рд░рд╛рдИ рдХреЗ рд▓рд┐рдП - "рджреГрд╖реНрдЯрд┐" рд░рд╛рдЗрдЯ-рдЯреЙрдк:

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪрд┐рддреНрд░ рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗред

рдиреЛрдбреНрд╕ рдкрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ

рди рдХреЗрд╡рд▓ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдЦ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрдврд╝реЗрдВрд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдХреЗ:

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдХреБрдЫ рдиреЗ рдХреНрд╖рдорддрд╛ рдорд╛рдВрдЧреА рд╣реИ "рдмрд┐рд▓реНрдХреБрд▓" рд╣рдЯрд╛рдПрдВ рдРрд╕реА рдпреЛрдЬрдирд╛рдПрдБ рднреА рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реИрдВ - рдХреГрдкрдпрд╛, рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

PostgreSQL рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдФрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдирд╛

рдареАрдХ рд╣реИ, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ рд╕рд╣рд╛рдпрддрд╛ рд╕рдореВрд╣рдЬрд╣рд╛рдВ рдЖрдк рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд╕реБрдЭрд╛рд╡ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ