PostgreSQL เจตเจฟเฉฑเจš เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€เจ†เจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

PostgreSQL เจตเจฟเฉฑเจš เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€เจ†เจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ
เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจธเฉฐเจธเจพเจฐ เจตเจฟเฉฑเจš, เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจธเจŸเฉ‹เจฐเฉ‡เจœ (เจœเจฟเจธเจจเฉ‚เฉฐ "เจนเฉ€เจช" เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ) เจฆเฉ€ เจ•เฉเจธเจผเจฒ เจจเฉˆเจตเฉ€เจ—เฉ‡เจธเจผเจจ เจฒเจˆ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเจจเฅค เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ•เจฒเฉฑเจธเจŸเจฐเจฟเฉฐเจ— เจฆเจพ เจธเจฎเจฐเจฅเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ MVCC เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ•เฉ‹ เจŸเฉ‚เจชเจฒ เจฆเฉ‡ เจ•เจˆ เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจจเจพเจฒ เจ–เจคเจฎ เจ•เจฐเจจ เจฆเจพ เจ•เจพเจฐเจจ เจฌเจฃเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจจ เจฒเจˆ เจ•เฉเจธเจผเจฒ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจฌเจฃเจพเจˆ เจฐเฉฑเจ–เจฃ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจฃเจพ เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆเฅค

เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจฌเจฟเจนเจคเจฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจฅเฉ‡ เจ•เฉเจ เจธเฉเจเจพเจ… เจนเจจเฅค

เจจเฉ‹เจŸ: เจนเฉ‡เจ เจพเจ‚ เจฆเจฐเจธเจพเจ เจ—เจ เจธเจตเจพเจฒ เจ‡เฉฑเจ• เจ…เจฃเจธเฉ‹เจงเจฟเจ† 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจจ pagila เจจเจฎเฉ‚เจจเจพ เจกเจพเจŸเจพเจฌเฉ‡เจธ.

เจ•เจตเจฐเจฟเฉฐเจ— เจ‡เฉฐเจกเฉˆเจ•เจธเจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

เจ†เจ‰ เจจเจพ-เจธเจฐเจ—เจฐเจฎ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฒเจˆ เจˆเจฎเฉ‡เจฒ เจชเจคเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจเจ•เจธเจŸเจฐเฉˆเจ•เจŸ เจ•เจฐเจจ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เฉ€เจเฅค เจŸเฉ‡เจฌเจฒ customer เจ‡เฉฑเจ• เจ•เจพเจฒเจฎ เจนเฉˆ active, เจ…เจคเฉ‡ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจธเจงเจพเจฐเจจ เจนเฉˆ:

pagila=# EXPLAIN SELECT email FROM customer WHERE active=0;
                        QUERY PLAN
-----------------------------------------------------------
 Seq Scan on customer  (cost=0.00..16.49 rows=15 width=32)
   Filter: (active = 0)
(2 rows)

เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจชเฉ‚เจฐเฉ€ เจŸเฉ‡เจฌเจฒ เจธเจ•เฉˆเจจ เจ•เฉเจฐเจฎ เจฆเฉ€ เจฎเฉฐเจ— เจ•เจฐเจฆเฉ€ เจนเฉˆ customer. เจšเจฒเฉ‹ เจ‡เฉฑเจ• เจ•เจพเจฒเจฎ เจ‰เฉฑเจคเฉ‡ เจ‡เฉฑเจ• เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฌเจฃเจพเจˆเจ active:

pagila=# CREATE INDEX idx_cust1 ON customer(active);
CREATE INDEX
pagila=# EXPLAIN SELECT email FROM customer WHERE active=0;
                                 QUERY PLAN
-----------------------------------------------------------------------------
 Index Scan using idx_cust1 on customer  (cost=0.28..12.29 rows=15 width=32)
   Index Cond: (active = 0)
(2 rows)

เจ‡เจธเจจเฉ‡ เจฎเจฆเจฆ เจ•เฉ€เจคเฉ€, เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจธเจ•เฉˆเจจ " เจตเจฟเฉฑเจš เจฌเจฆเจฒ เจ—เจฟเจ†index scan". เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจธเจ•เฉˆเจจ เจ•เจฐเฉ‡เจ—เจพ "idx_cust1", เจ…เจคเฉ‡ เจซเจฟเจฐ เจฆเฉ‚เจœเฉ‡ เจ•เจพเจฒเจฎเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจ เจฒเจˆ เจŸเฉ‡เจฌเจฒ เจนเฉ€เจช เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจจเจพ เจœเจพเจฐเฉ€ เจฐเฉฑเจ–เฉ‹ (เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจ•เจพเจฒเจฎ email) เจœเจฟเจธ เจฆเฉ€ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ•เจตเจฐเจฟเฉฐเจ— เจ‡เฉฐเจกเฉˆเจ•เจธ PostgreSQL 11 เจตเจฟเฉฑเจš เจชเฉ‡เจธเจผ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจเฅค เจ‰เจน เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจœเจพเจ‚ เจ‡เฉฑเจ• เจคเฉ‹เจ‚ เจตเฉฑเจง เจตเจพเจงเฉ‚ เจ•เจพเจฒเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจธเจผเจพเจฎเจฒ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจ - เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจกเฉ‡เจŸเจพ เจธเจŸเฉ‹เจฐ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ.

เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจฆเจพ เจซเจพเจ‡เจฆเจพ เจ‰เจ เจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจˆเจฎเฉ‡เจฒ เจฎเฉเฉฑเจฒ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจจเฉ‚เฉฐ เจฎเฉเฉฑเจฒ เจฒเจˆ เจŸเฉ‡เจฌเจฒ เจนเฉ€เจช เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค email. เจ†เจ“ เจฆเฉ‡เจ–เฉ€เจ เจ•เจฟ เจ•เฉ€ เจ‡เจน เจ•เฉฐเจฎ เจ•เจฐเฉ‡เจ—เจพ:

pagila=# CREATE INDEX idx_cust2 ON customer(active) INCLUDE (email);
CREATE INDEX
pagila=# EXPLAIN SELECT email FROM customer WHERE active=0;
                                    QUERY PLAN
----------------------------------------------------------------------------------
 Index Only Scan using idx_cust2 on customer  (cost=0.28..12.29 rows=15 width=32)
   Index Cond: (active = 0)
(2 rows)

ยซIndex Only Scan' เจธเจพเจจเฉ‚เฉฐ เจฆเฉฑเจธเจฆเจพ เจนเฉˆ เจ•เจฟ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจจเฉ‚เฉฐ เจนเฉเจฃ เจธเจฟเจฐเจซเจผ เจ‡เฉฐเจกเฉˆเจ•เจธ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจŸเฉ‡เจฌเจฒ เจนเฉ€เจช เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจ เจฒเจˆ เจธเจพเจฐเฉ€เจ†เจ‚ เจกเจฟเจธเจ• I/O เจคเฉ‹เจ‚ เจฌเจšเจฃ เจตเจฟเฉฑเจš เจฎเจฆเจฆ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ•เจตเจฐเจฟเฉฐเจ— เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซ เจฌเฉ€-เจฐเฉเฉฑเจ–เจพเจ‚ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจนเจจเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจฐเฉฑเจ–-เจฐเจ–เจพเจ… เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจตเจงเฉ‡เจฐเฉ‡ เจนเฉ‹เจตเฉ‡เจ—เฉ€.

เจ…เฉฐเจธเจผเจ• เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

เจ…เฉฐเจธเจผเจ• เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจ•เจคเจพเจฐเจพเจ‚ เจฆเฉ‡ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจ‰เจช เจธเจฎเฉ‚เจน เจจเฉ‚เฉฐ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ‡เจน เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ‡ เจ†เจ•เจพเจฐ เจจเฉ‚เฉฐ เจฌเจšเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจ•เฉˆเจจ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค

เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ•เฉˆเจฒเฉ€เจซเฉ‹เจฐเจจเฉ€เจ† เจตเจฟเฉฑเจš เจ†เจชเจฃเฉ‡ เจ—เจพเจนเจ•เจพเจ‚ เจฆเฉ‡ เจˆเจฎเฉ‡เจฒ เจชเจคเจฟเจ†เจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจฌเฉ‡เจจเจคเฉ€ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจนเฉ‹เจตเฉ‡เจ—เฉ€:

SELECT c.email FROM customer c
JOIN address a ON c.address_id = a.address_id
WHERE a.district = 'California';
which has a query plan that involves scanning both the tables that are joined:
pagila=# EXPLAIN SELECT c.email FROM customer c
pagila-# JOIN address a ON c.address_id = a.address_id
pagila-# WHERE a.district = 'California';
                              QUERY PLAN
----------------------------------------------------------------------
 Hash Join  (cost=15.65..32.22 rows=9 width=32)
   Hash Cond: (c.address_id = a.address_id)
   ->  Seq Scan on customer c  (cost=0.00..14.99 rows=599 width=34)
   ->  Hash  (cost=15.54..15.54 rows=9 width=4)
         ->  Seq Scan on address a  (cost=0.00..15.54 rows=9 width=4)
               Filter: (district = 'California'::text)
(6 rows)

เจ†เจฎ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจธเจพเจจเฉ‚เฉฐ เจ•เฉ€ เจฆเฉ‡เจฃเจ—เฉ‡:

pagila=# CREATE INDEX idx_address1 ON address(district);
CREATE INDEX
pagila=# EXPLAIN SELECT c.email FROM customer c
pagila-# JOIN address a ON c.address_id = a.address_id
pagila-# WHERE a.district = 'California';
                                      QUERY PLAN
---------------------------------------------------------------------------------------
 Hash Join  (cost=12.98..29.55 rows=9 width=32)
   Hash Cond: (c.address_id = a.address_id)
   ->  Seq Scan on customer c  (cost=0.00..14.99 rows=599 width=34)
   ->  Hash  (cost=12.87..12.87 rows=9 width=4)
         ->  Bitmap Heap Scan on address a  (cost=4.34..12.87 rows=9 width=4)
               Recheck Cond: (district = 'California'::text)
               ->  Bitmap Index Scan on idx_address1  (cost=0.00..4.34 rows=9 width=0)
                     Index Cond: (district = 'California'::text)
(8 rows)

เจธเจ•เฉˆเจจ เจ•เจฐเฉ‹ address เจ‡เฉฐเจกเฉˆเจ•เจธ เจธเจ•เฉˆเจจ เจจเจพเจฒ เจฌเจฆเจฒ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆ idx_address1, เจ…เจคเฉ‡ เจซเจฟเจฐ เจขเฉ‡เจฐ เจจเฉ‚เฉฐ เจธเจ•เฉˆเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€ address.

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจ‡เฉฑเจ• เจ…เจ•เจธเจฐ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ…เฉฐเจธเจผเจ• เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจธเจฟเจฐเจซเจผ เจ‰เจนเจจเจพเจ‚ เจ•เจคเจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจชเจคเจฟเจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจœเจผเจฟเจฒเฉเจนเจพ โ€˜Californiaโ€™:

pagila=# CREATE INDEX idx_address2 ON address(address_id) WHERE district='California';
CREATE INDEX
pagila=# EXPLAIN SELECT c.email FROM customer c
pagila-# JOIN address a ON c.address_id = a.address_id
pagila-# WHERE a.district = 'California';
                                           QUERY PLAN
------------------------------------------------------------------------------------------------
 Hash Join  (cost=12.38..28.96 rows=9 width=32)
   Hash Cond: (c.address_id = a.address_id)
   ->  Seq Scan on customer c  (cost=0.00..14.99 rows=599 width=34)
   ->  Hash  (cost=12.27..12.27 rows=9 width=4)
         ->  Index Only Scan using idx_address2 on address a  (cost=0.14..12.27 rows=9 width=4)
(5 rows)

เจนเฉเจฃ เจธเจตเจพเจฒ เจนเฉ€ เจชเฉœเฉเจนเจฆเจพ เจนเฉˆ idx_address2 เจ…เจคเฉ‡ เจฎเฉ‡เจœเจผ เจจเฉ‚เฉฐ เจจเจนเฉ€เจ‚ เจ›เฉ‚เจนเจฆเจพ address.

เจฌเจนเฉ-เจฎเฉเฉฑเจฒ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

เจ‡เฉฐเจกเฉˆเจ•เจธ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจ•เฉเจ เจ•เจพเจฒเจฎเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจ•เฉ‡เจฒเจฐ เจกเจพเจŸเจพ เจ•เจฟเจธเจฎ เจจเจนเฉ€เจ‚ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ•เจพเจฒเจฎ เจฆเฉ€เจ†เจ‚ เจ•เจฟเจธเจฎเจพเจ‚ เจœเจฟเจตเฉ‡เจ‚ jsonb, arrays ะธ tsvector เจธเฉฐเจฏเฉเจ•เจค เจœเจพเจ‚ เจฎเจฒเจŸเฉ€เจชเจฒ เจฎเฉเฉฑเจฒ เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ…เจœเจฟเจนเฉ‡ เจ•เจพเจฒเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฐเจกเฉˆเจ•เจธ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจ•เจพเจฒเจฎเจพเจ‚ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจจเฉ€ เจชเฉˆเจ‚เจฆเฉ€ เจนเฉˆเฅค

เจ†เจ‰ เจ‰เจนเจจเจพเจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจซเจฟเจฒเจฎเจพเจ‚ เจฆเฉ‡ เจธเจฟเจฐเจฒเฉ‡เจ–เจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉฑเจญเจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ…เจธเจซเจฒ เจŸเฉ‡เจ•เจธ เจคเฉ‹เจ‚ เจ•เฉฑเจŸ เจนเจจเฅค เจŸเฉ‡เจฌเจฒ film เจ‡เฉฑเจ• เจŸเฉˆเจ•เจธเจŸ เจ•เจพเจฒเจฎ เจนเฉˆ เจœเจฟเจธเจจเฉ‚เฉฐ เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจจ special_features. เจœเฉ‡เจ•เจฐ เจซเจฟเจฒเจฎ เจตเจฟเฉฑเจš เจ‡เจน "เจตเจฟเจธเจผเฉ‡เจธเจผ เจธเฉฐเจชเจคเฉ€" เจนเฉˆ, เจคเจพเจ‚ เจ•เจพเจฒเจฎ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจ•เจธเจŸ เจเจฐเฉ‡ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจคเฉฑเจค เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆ Behind The Scenes. เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจซเจฟเจฒเจฎเจพเจ‚ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจจ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ "เจฌเจฟเจนเจพเจˆเจ‚เจก เจฆเจฟ เจธเฉ€เจจเจœเจผ" เจจเจพเจฒ เจธเจพเจฐเฉ€เจ†เจ‚ เจ•เจคเจพเจฐเจพเจ‚ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจ•เฉ‹เจˆ เจตเฉ€ เจเจฐเฉ‡ เจฎเฉเฉฑเจฒ special_features:

SELECT title FROM film WHERE special_features @> '{"Behind The Scenes"}';

เจจเฉ‡เจธเจŸเจฟเฉฐเจ— เจ†เจชเจฐเฉ‡เจŸเจฐ @> เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เฉ€ เจธเฉฑเจœเจพ เจชเจพเจธเจพ เจ–เฉฑเจฌเฉ‡ เจชเจพเจธเฉ‡ เจฆเจพ เจธเจฌเจธเฉˆเฉฑเจŸ เจนเฉˆเฅค

เจฏเฉ‹เจœเจจเจพ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเฉ‹:

pagila=# EXPLAIN SELECT title FROM film
pagila-# WHERE special_features @> '{"Behind The Scenes"}';
                           QUERY PLAN
-----------------------------------------------------------------
 Seq Scan on film  (cost=0.00..67.50 rows=5 width=15)
   Filter: (special_features @> '{"Behind The Scenes"}'::text[])
(2 rows)

เจœเฉ‹ เจ•เจฟ 67 เจฆเฉ€ เจฒเจพเจ—เจค เจจเจพเจฒ เจชเฉ‚เจฐเฉ‡ เจนเฉ€เจช เจธเจ•เฉˆเจจ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ†เจ“ เจฆเฉ‡เจ–เฉ€เจ เจ•เจฟ เจ•เฉ€ เจ‡เฉฑเจ• เจจเจฟเจฏเจฎเจค เจฌเฉ€-เจŸเฉเจฐเฉ€ เจ‡เฉฐเจกเฉˆเจ•เจธ เจธเจพเจกเฉ€ เจฎเจฆเจฆ เจ•เจฐเจฆเจพ เจนเฉˆ:

pagila=# CREATE INDEX idx_film1 ON film(special_features);
CREATE INDEX
pagila=# EXPLAIN SELECT title FROM film
pagila-# WHERE special_features @> '{"Behind The Scenes"}';
                           QUERY PLAN
-----------------------------------------------------------------
 Seq Scan on film  (cost=0.00..67.50 rows=5 width=15)
   Filter: (special_features @> '{"Behind The Scenes"}'::text[])
(2 rows)

เจธเฉ‚เจšเจ•เจพเจ‚เจ• 'เจคเฉ‡ เจตเฉ€ เจตเจฟเจšเจพเจฐ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ†เฅค เจฌเฉ€-เจŸเฉเจฐเฉ€ เจ‡เฉฐเจกเฉˆเจ•เจธ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฎเฉเฉฑเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจคเฉฑเจคเจพเจ‚ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเฉ‚ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• GIN เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

pagila=# CREATE INDEX idx_film2 ON film USING GIN(special_features);
CREATE INDEX
pagila=# EXPLAIN SELECT title FROM film
pagila-# WHERE special_features @> '{"Behind The Scenes"}';
                                QUERY PLAN
---------------------------------------------------------------------------
 Bitmap Heap Scan on film  (cost=8.04..23.58 rows=5 width=15)
   Recheck Cond: (special_features @> '{"Behind The Scenes"}'::text[])
   ->  Bitmap Index Scan on idx_film2  (cost=0.00..8.04 rows=5 width=0)
         Index Cond: (special_features @> '{"Behind The Scenes"}'::text[])
(4 rows)

GIN เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจ‡เฉฐเจกเฉˆเจ•เจธ เจ•เฉ€เจคเฉ‡ เจฎเจฟเจธเจผเจฐเจฟเจค เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ‡ เจตเจฟเจฐเฉเฉฑเจง เจธเจฟเฉฐเจ—เจฒ เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจฎเฉˆเจชเจฟเฉฐเจ— เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ, เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจ‡เฉฑเจ• เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฏเฉ‹เจœเจจเจพ เจฆเฉ€ เจฒเจพเจ—เจค เจ…เฉฑเจงเฉ‡ เจคเฉ‹เจ‚ เจตเฉฑเจง เจนเฉˆเฅค

เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจŸ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจคเฉ‹เจ‚ เจ›เฉเจŸเจ•เจพเจฐเจพ เจชเจพเจ‰เจฃเจพ

เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เจ•เฉฑเจ เฉ‡ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ•เจˆ เจตเจพเจฐ เจ‡เฉฑเจ• เจจเจตเฉ‡เจ‚ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจตเจฟเฉฑเจš เจชเจฟเจ›เจฒเฉ€เจ†เจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฆเฉ€ เจชเจฐเจฟเจญเจพเจธเจผเจพ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€เจ†เจ‚ เจฎเจจเฉเฉฑเจ–เฉ€-เจชเฉœเฉเจนเจจเจฏเฉ‹เจ— SQL เจชเจฐเจฟเจญเจพเจธเจผเจพเจตเจพเจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจ•เฉˆเจŸเจพเจฒเจพเจ— เจฆเฉเจฐเจฟเจธเจผ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค pg_indexes. เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ•เฉ‹ เจœเจฟเจนเฉ€เจ†เจ‚ เจชเจฐเจฟเจญเจพเจธเจผเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจฒเฉฑเจญ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

 SELECT array_agg(indexname) AS indexes, replace(indexdef, indexname, '') AS defn
    FROM pg_indexes
GROUP BY defn
  HAVING count(*) > 1;
And hereโ€™s the result when run on the stock pagila database:
pagila=#   SELECT array_agg(indexname) AS indexes, replace(indexdef, indexname, '') AS defn
pagila-#     FROM pg_indexes
pagila-# GROUP BY defn
pagila-#   HAVING count(*) > 1;
                                indexes                                 |                                defn
------------------------------------------------------------------------+------------------------------------------------------------------
 {payment_p2017_01_customer_id_idx,idx_fk_payment_p2017_01_customer_id} | CREATE INDEX  ON public.payment_p2017_01 USING btree (customer_id
 {payment_p2017_02_customer_id_idx,idx_fk_payment_p2017_02_customer_id} | CREATE INDEX  ON public.payment_p2017_02 USING btree (customer_id
 {payment_p2017_03_customer_id_idx,idx_fk_payment_p2017_03_customer_id} | CREATE INDEX  ON public.payment_p2017_03 USING btree (customer_id
 {idx_fk_payment_p2017_04_customer_id,payment_p2017_04_customer_id_idx} | CREATE INDEX  ON public.payment_p2017_04 USING btree (customer_id
 {payment_p2017_05_customer_id_idx,idx_fk_payment_p2017_05_customer_id} | CREATE INDEX  ON public.payment_p2017_05 USING btree (customer_id
 {idx_fk_payment_p2017_06_customer_id,payment_p2017_06_customer_id_idx} | CREATE INDEX  ON public.payment_p2017_06 USING btree (customer_id
(6 rows)

เจธเฉเจชเจฐเจธเฉˆเฉฑเจŸ เจธเฉ‚เจšเจ•เจพเจ‚เจ•

เจ‡เจน เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ‡ เจจเจพเจฒ เจ–เจคเจฎ เจนเฉ‹เจตเฉ‹, เจœเจฟเจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจ•เจพเจฒเจฎเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเฉเจชเจฐเจธเฉˆเฉฑเจŸ เจจเฉ‚เฉฐ เจธเฉ‚เจšเฉ€เจฌเฉฑเจง เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจฆเฉ‚เจœเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจน เจซเจพเจ‡เจฆเฉ‡เจฎเฉฐเจฆ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจœเจพเจ‚ เจจเจนเฉ€เจ‚ เจตเฉ€ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆโ€”เจธเฉเจชเจฐเจธเฉˆเฉฑเจŸ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจธเจฟเจฐเจซเจผ-เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจธเจ•เฉˆเจจ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจšเฉฐเจ—เจพ เจนเฉˆ, เจชเจฐ เจ‡เจน เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจฅเจพเจ‚ เจฒเฉˆ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจพเจ‚ เจ‰เจน เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจœเฉ‹ เจธเฉเจชเจฐเจธเฉˆเฉฑเจŸ เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจนเฉเจฃ เจตเจฐเจคเจฟเจ† เจจเจนเฉ€เจ‚ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจœเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ…เจœเจฟเจนเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจชเจฐเจฟเจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ pg_index เจฎเฉ‡เจœเจผ เจคเฉ‹เจ‚ pg_catalog.

เจจเจพ เจตเจฐเจคเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ•

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจตเจพเจฒเฉ€เจ†เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจตเจฟเจ•เจธเจฟเจค เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ, เจ‰เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจตเจฐเจคเฉ‡ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจธเจตเจพเจฒ เจตเฉ€ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจชเจนเจฟเจฒเจพเจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจนเฉเจฃ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฆเฉเจ†เจฐเจพ เจจเจนเฉ€เจ‚ เจตเจฐเจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจนเจฐ เจตเจพเจฐ เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจธเจ•เฉˆเจจ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ…เฉฐเจ•เฉœเจพ เจชเฉเจฐเจฌเฉฐเจงเจ• เจฆเฉเจ†เจฐเจพ เจšเจฟเฉฐเจจเฉเจนเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจธเจฟเจธเจŸเจฎ เจ•เฉˆเจŸเจพเจฒเจพเจ— เจฆเฉเจฐเจฟเจธเจผ เจตเจฟเฉฑเจš pg_stat_user_indexes เจคเฉเจธเฉ€เจ‚ เจฎเฉเฉฑเจฒ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ idx_scan, เจœเฉ‹ เจ•เจฟ เจ‡เฉฑเจ• เจธเฉฐเจšเจค เจ•เจพเจŠเจ‚เจŸเจฐ เจนเฉˆเฅค เจธเจฎเฉ‡เจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจฎเจฟเจ†เจฆ (เจ‡เฉฑเจ• เจฎเจนเฉ€เจจเจพ เจ•เจนเฉ‹) เจตเจฟเฉฑเจš เจ‡เจธ เจฎเฉเฉฑเจฒ เจจเฉ‚เฉฐ เจŸเจฐเฉˆเจ• เจ•เจฐเจจเจพ เจ‡เฉฑเจ• เจšเฉฐเจ—เจพ เจตเจฟเจšเจพเจฐ เจฆเฉ‡เจตเฉ‡เจ—เจพ เจ•เจฟ เจ•เจฟเจนเฉœเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจตเจฐเจคเฉ‡ เจจเจนเฉ€เจ‚ เจœเจพ เจฐเจนเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจ‡เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ›เฉฑเจกเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจธเจ•เฉ€เจฎเจพ เจตเจฟเฉฑเจš เจธเจพเจฐเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจพ เจธเจ•เฉˆเจจ เจ—เจฟเจฃเจคเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจนเฉˆ โ€˜publicโ€™:

SELECT relname, indexrelname, idx_scan
FROM   pg_catalog.pg_stat_user_indexes
WHERE  schemaname = 'public';
with output like this:
pagila=# SELECT relname, indexrelname, idx_scan
pagila-# FROM   pg_catalog.pg_stat_user_indexes
pagila-# WHERE  schemaname = 'public'
pagila-# LIMIT  10;
    relname    |    indexrelname    | idx_scan
---------------+--------------------+----------
 customer      | customer_pkey      |    32093
 actor         | actor_pkey         |     5462
 address       | address_pkey       |      660
 category      | category_pkey      |     1000
 city          | city_pkey          |      609
 country       | country_pkey       |      604
 film_actor    | film_actor_pkey    |        0
 film_category | film_category_pkey |        0
 film          | film_pkey          |    11043
 inventory     | inventory_pkey     |    16048
(10 rows)

เจ˜เฉฑเจŸ เจคเจพเจฒเฉ‡ เจฆเฉ‡ เจจเจพเจฒ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจฎเฉเฉœ เจฌเจฃเจพเจ‰เจฃเจพ

เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจ…เจ•เจธเจฐ เจฆเฉเจฌเจพเจฐเจพ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ เจœเจฆเฉ‹เจ‚ เจ‰เจน เจซเฉเฉฑเจฒ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจฆเฉเจฌเจพเจฐเจพ เจฌเจฃเจพเจ‰เจฃเจพ เจธเจ•เฉˆเจจ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจตเฉ€ เจ–เจฐเจพเจฌ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฒเจˆ เจ‡เจธเจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจตเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจชเฉˆเจฐเจฒเจฒ เจ‡เฉฐเจกเฉˆเจ•เจธ เจฌเจฃเจพเจ‰เจฃ เจจเฉ‚เฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจ“

PostgreSQL 11 เจตเจฟเฉฑเจš, เจ‡เฉฑเจ• เจฌเฉ€-เจŸเฉเจฐเฉ€ เจ‡เฉฐเจกเฉˆเจ•เจธ เจฌเจฃเจพเจ‰เจฃเจพ เจธเจฎเจ•เจพเจฒเฉ€ เจนเฉˆเฅค เจฐเจšเจจเจพ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผ เจ•เจฐเจจ เจฒเจˆ, เจ•เจˆ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจ•เจพเจฎเจฟเจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ“ เจ•เจฟ เจ‡เจน เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเจ•เจฒเจช เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจ:

SET max_parallel_workers = 32;
SET max_parallel_maintenance_workers = 16;

เจชเฉ‚เจฐเจต-เจจเจฟเจฐเจงเจพเจฐเจค เจฎเฉเฉฑเจฒ เจฌเจนเฉเจค เจ›เฉ‹เจŸเฉ‡ เจนเจจเฅค เจ†เจฆเจฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡, เจ‡เจน เจธเฉฐเจ–เจฟเจ† เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฐ เจ•เฉ‹เจฐ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจตเจงเจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ. เจตเจฟเฉฑเจš เจนเฉ‹เจฐ เจชเฉœเฉเจนเฉ‹ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

เจฌเฉˆเจ•เจ—เฉเจฐเจพเจŠเจ‚เจก เจ‡เฉฐเจกเฉˆเจ•เจธ เจฌเจฃเจพเจ‰เจฃเจพ

เจคเฉเจธเฉ€เจ‚ เจตเจฟเจ•เจฒเจช เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฌเฉˆเจ•เจ—เฉเจฐเจพเจ‰เจ‚เจก เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ CONCURRENTLY เจ•เจฎเจพเจ‚เจกเจพเจ‚ CREATE INDEX:

pagila=# CREATE INDEX CONCURRENTLY idx_address1 ON address(district);
CREATE INDEX

เจ‡เจน เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ†เจฎ เจจเจพเจฒเฉ‹เจ‚ เจตเฉฑเจ–เจฐเฉ€ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจธ เจจเฉ‚เฉฐ เจŸเฉ‡เจฌเจฒ 'เจคเฉ‡ เจฒเจพเจ• เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธเจฒเจˆ เจฒเจฟเจ–เจฃ เจฆเฉ€เจ†เจ‚ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจจเฉ‚เฉฐ เจฌเจฒเฉŒเจ• เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฆเฉ‚เจœเฉ‡ เจชเจพเจธเฉ‡, เจ‡เจน เจตเจงเฉ‡เจฐเฉ‡ เจธเจฎเจพเจ‚ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ€ เจ–เจชเจค เจ•เจฐเจฆเจพ เจนเฉˆ.

เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจตเจฟเจธเจผเฉ‡เจธเจผ เจ•เฉ‡เจธเจพเจ‚ เจจเจพเจฒ เจจเจœเจฟเฉฑเจ เจฃ เจฆเฉ‡ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ เจคเฉเจนเจพเจกเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจตเจฟเจธเจซเฉ‹เจŸ เจจเจพเจฒ เจตเจงเจฃ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฐเจจ เจฆเฉ‡ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฒเจˆ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจฒเจšเจ•เจคเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‰เจฎเฉ€เจฆ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ‡เจน เจธเฉเจเจพเจ… เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ›เจพเจ‚ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจธเจ•เฉ‡เจฒ เจ•เจฐเจจ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจคเฉเจนเจพเจกเฉ€ เจฎเจฆเจฆ เจ•เจฐเจจเจ—เฉ‡เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹