PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เชตเชงเซ เชธเช—เชตเชกเชคเชพเชฅเซ€ เชธเชฎเชœเชตเซเช‚

เช…เชกเชงเชพ เชตเชฐเซเชท เชชเชนเซ‡เชฒเชพ เช…เชฎเซ‡ เชฐเชœเซ‚ เช•เชฐเซเชฏเซเช‚ explain.tensor.ru - เชœเชพเชนเซ‡เชฐ เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เชชเชพเชฐเซเชธเชฟเช‚เช— เช…เชจเซ‡ เชตเชฟเชเซเชฏเซเช…เชฒเชพเชˆเช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‡เชตเชพ 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 เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เชตเชงเซ เชธเช—เชตเชกเชคเชพเชฅเซ€ เชธเชฎเชœเชตเซเช‚

JSON เช…เชจเซ‡ YAML

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 เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เชตเชงเซ เชธเช—เชตเชกเชคเชพเชฅเซ€ เชธเชฎเชœเชตเซเช‚

I/O เชธเชฎเชฏ

เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชคเชฎเชพเชฐเซ‡ เชเชตเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚, เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ€ เชฆเซเชฐเชทเซเชŸเชฟเช, เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เช–เซ‚เชฌ เชตเชพเช‚เชšเซเชฏเซเช‚ เช…เชจเซ‡ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เช…เชฎเชฒเชจเซ‹ เชธเชฎเชฏ เช•เซ‹เชˆ เช•เชพเชฐเชฃเซ‹เชธเชฐ เช…เชธเช‚เช—เชค เชฐเซ€เชคเซ‡ เชฎเซ‹เชŸเซ‹ เช›เซ‡.

เช…เชนเซ€เช‚ เช•เชนเซ‡เชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡:เช“เชน, เชคเซ‡ เช•เซเชทเชฃเซ‡, เชธเชฐเซเชตเชฐ เชชเชฐเชจเซ€ เชกเชฟเชธเซเช• เช•เชฆเชพเชš เช–เซ‚เชฌ เชตเซเชฏเชธเซเชค เชนเชคเซ€, เชคเซ‡เชฅเซ€ เชœ เชคเซ‡เชจเซ‡ เชตเชพเช‚เชšเชตเชพเชฎเชพเช‚ เช†เชŸเชฒเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹!"เชชเชฐเช‚เชคเซ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชคเซ‡ เช–เซ‚เชฌ เชธเชšเซ‹เชŸ เชจเชฅเซ€ ...

เชชเชฐเช‚เชคเซ เชคเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชฐเซ€เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ เชชเซ€เชœเซ€ เชธเชฐเซเชตเชฐเชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชตเชฟเช•เชฒเซเชชเซ‹เชฎเชพเช‚ เชคเซเชฏเชพเช‚ เช›เซ‡ track_io_timing:

เชธเชฎเชฏเชฌเชฆเซเชง I/O เช‘เชชเชฐเซ‡เชถเชจเซเชธเชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเซ‡ เช›เซ‡. เช† เชธเซ‡เชŸเชฟเช‚เช— เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เช…เช•เซเชทเชฎ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡เชจเซ‡ เช‘เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชธเชฎเชฏเชจเซ€ เชธเชคเชค เช•เซเชตเซ‡เชฐเซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎเซเชธ เชชเชฐ เชตเชธเซเชคเซเช“เชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชงเซ€เชฎเซเช‚ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เชธเชฎเชฏเชจเชพ เช“เชตเชฐเชนเซ‡เชกเชจเซ‹ เช…เช‚เชฆเชพเชœ เช•เชพเชขเชตเชพ pg_test_timing เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. I/O เช†เช‚เช•เชกเชพ pg_stat_database เชตเซเชฏเซ เชฆเซเชตเชพเชฐเชพ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชเช•เซเชธเชชเซเชฒเซ‡เชจ เช†เช‰เชŸเชชเซเชŸเชฎเชพเช‚ (เชœเซเชฏเชพเชฐเซ‡ เชฌเชซเชฐเซเชธ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡) เช…เชจเซ‡ pg_stat_statements เชตเซเชฏเซ เชฆเซเชตเชพเชฐเชพ.

เช† เชตเชฟเช•เชฒเซเชช เชธเซเชฅเชพเชจเชฟเช• เชธเชคเซเชฐเชฎเชพเช‚ เชชเชฃ เชธเช•เซเชทเชฎ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡:

SET track_io_timing = TRUE;

เช เซ€เช• เช›เซ‡, เชนเชตเซ‡ เชถเซเชฐเซ‡เชทเซเช  เชญเชพเช— เช เช›เซ‡ เช•เซ‡ เช…เชฎเซ‡ เช† เชกเซ‡เชŸเชพเชจเซ‡ เชธเชฎเชœเชตเชพ เช…เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เชถเซ€เช–เซเชฏเชพ เช›เซ€เช, เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชŸเซเชฐเซ€เชจเชพ เชคเชฎเชพเชฎ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฃเซ‹เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชคเชพ:

PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เชตเชงเซ เชธเช—เชตเชกเชคเชพเชฅเซ€ เชธเชฎเชœเชตเซเช‚

เช…เชนเซ€เช‚ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจเชจเชพ เช•เซเชฒ เชธเชฎเชฏเชจเชพ 0.790msเชฎเชพเช‚เชฅเซ€, 0.718msเช เชกเซ‡เชŸเชพเชจเซเช‚ เชเช• เชชเซƒเชทเซเช  เชตเชพเช‚เชšเซเชฏเซเช‚, 0.044ms - เชคเซ‡เชจเซ‡ เชฒเช–เชตเชพ, เช…เชจเซ‡ เชฎเชพเชคเซเชฐ 0.028ms เช เช…เชจเซเชฏ เชคเชฎเชพเชฎ เช‰เชชเชฏเซ‹เช—เซ€ เชชเซเชฐเชตเซƒเชคเซเชคเชฟ เชฎเชพเชŸเซ‡ เช–เชฐเซเชšเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹!

PostgreSQL 13 เชธเชพเชฅเซ‡เชจเซเช‚ เชญเชตเชฟเชทเซเชฏ

เชจเชตเซเช‚ เชถเซเช‚ เช›เซ‡ เชคเซ‡เชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชเชพเช‚เช–เซ€ เชฎเชพเชŸเซ‡, เชœเซเช“ เชตเชฟเช—เชคเชตเชพเชฐ เชฒเซ‡เช–เชฎเชพเช‚, เช…เชจเซ‡ เช…เชฎเซ‡ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชฏเซ‹เชœเชจเชพเช“เชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช.

เช†เชฏเซ‹เชœเชจ เชฌเชซเชฐ

เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐเชจเซ‡ เชซเชพเชณเชตเซ‡เชฒ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซเช‚ เชเช•เชพเช‰เชจเซเชŸเชฟเช‚เช— เช…เชจเซเชฏ เชชเซ‡เชšเชฎเชพเช‚ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เชฅเชพเชฏ เช›เซ‡ เชœเซ‡ pg_stat_statements เชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เชจเชฅเซ€. BUFFERS เชตเชฟเช•เชฒเซเชช เชธเชพเชฅเซ‡ เชธเชฎเชœเชพเชตเซ‹ เช†เชฏเซ‹เชœเชจ เชคเชฌเช•เซเช•เชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชฌเชซเชฐเซเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเซ€ เชœเชพเชฃ เช•เชฐเชถเซ‡:

 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 เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เชตเชงเซ เชธเช—เชตเชกเชคเชพเชฅเซ€ เชธเชฎเชœเชตเซเช‚

UI/UX เชธเซเชงเชพเชฐเชพเช“

เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸ เชธเชฐเซเชตเชคเซเชฐ เช›เซ‡!

เชนเชตเซ‡ เชฆเชฐเซ‡เช• เชŸเซ‡เชฌ เชชเชฐ เชเชกเชชเชฅเซ€ เช•เชฐเชตเชพเชจเซ€ เชคเช• เช›เซ‡ เช•เซเชฒเชฟเชชเชฌเซ‹เชฐเซเชก เชชเชฐ เชŸเซ‡เชฌเชจเซ‹ เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸ เชฒเซ‹ เชŸเซ‡เชฌเชจเซ€ เชธเชฎเช—เซเชฐ เชชเชนเซ‹เชณเชพเชˆ เช…เชจเซ‡ เชŠเช‚เชกเชพเชˆ เชฎเชพเชŸเซ‡ - "เชฆเซเชฐเชทเซเชŸเชฟ" เชœเชฎเชฃเซ€ เชŸเซ‹เชš:

PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เชตเชงเซ เชธเช—เชตเชกเชคเชพเชฅเซ€ เชธเชฎเชœเชตเซเช‚

เช–เชฐเซ‡เช–เชฐ, เช† เชชเซเชฐเช•เชพเชถเชจ เชฎเชพเชŸเซ‡เชจเชพ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชšเชฟเชคเซเชฐเซ‹ เช† เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ.

เชจเซ‹เชกเซเชธ เชชเชฐ เชญเชฒเชพเชฎเชฃเซ‹

เชคเซ‡เชฎเชพเช‚เชจเชพ เชฎเชพเชคเซเชฐ เชตเชงเซ เชœ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชฆเชฐเซ‡เช• เชตเชฟเชถเซ‡ เชคเชฎเซ‡ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชตเชฟเช—เชคเชตเชพเชฐ เชฒเซ‡เช– เชตเชพเช‚เชšเซ‹เชฒเชฟเช‚เช•เชจเซ‡ เช…เชจเซเชธเชฐเซ€เชจเซ‡:

PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เชตเชงเซ เชธเช—เชตเชกเชคเชพเชฅเซ€ เชธเชฎเชœเชตเซเช‚

เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชฆเซ‚เชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เช•เซ‡เชŸเชฒเชพเช•เซ‡ เช•เซเชทเชฎเชคเชพ เชฎเชพเช‚เช—เซ€ เช›เซ‡ "เชšเซ‹เช•เซเช•เชธ" เช•เชพเชขเซ€ เชจเชพเช–เซ‹ เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚ เชชเซเชฐเช•เชพเชถเชฟเชค เชจ เชนเซ‹เชฏ เชคเซ‡เชตเซ€ เชฏเซ‹เชœเชจเชพเช“ เชชเชฃ - เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡, เชซเช•เซเชค เช…เชจเซเชฐเซ‚เชช เชšเชฟเชนเซเชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹:

PostgreSQL เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจเชจเซ‡ เชตเชงเซ เชธเช—เชตเชกเชคเชพเชฅเซ€ เชธเชฎเชœเชตเซเช‚

เช เซ€เช• เช›เซ‡, เชšเชพเชฒเซ‹ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚ เช•เซ‡ เช†เชชเชฃเซ€ เชชเชพเชธเซ‡ เช›เซ‡ เชธเชชเซ‹เชฐเซเชŸ เช—เซเชฐเซเชชเชœเซเชฏเชพเช‚ เชคเชฎเซ‡ เชคเชฎเชพเชฐเซ€ เชŸเชฟเชชเซเชชเชฃเซ€เช“ เช…เชจเซ‡ เชธเซ‚เชšเชจเซ‹ เชฒเช–เซ€ เชถเช•เซ‹ เช›เซ‹.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹