αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸ…αž€αŸ’αž“αž»αž„ PostgreSQL

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸ…αž€αŸ’αž“αž»αž„ PostgreSQL
αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž–αž›αŸ„αž€ Postgres αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαž»αž€αžšαž€αž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™ (αž αŸ…αžαžΆ "αž αŸŠαžΆαž”")αŸ” Postgres αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαžŠαžΆαž€αŸ‹αž…αž„αŸ’αž€αŸ„αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαž‘αŸ αž αžΎαž™αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ MVCC αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž’αŸ’αž“αž€αž”αž‰αŸ’αž…αž”αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ†αžŽαŸ‚αž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸƒ tuple αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžœαžΆαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž αž“αž·αž„αžšαž€αŸ’αžŸαžΆαž›αž·αž”αž·αž€αŸ’αžšαž˜αž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– αžŠαžΎαž˜αŸ’αž”αžΈαž‚αžΆαŸ†αž‘αŸ’αžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ”

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‚αž“αŸ’αž›αžΉαŸ‡αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– αž“αž·αž„αž€αŸ‚αž›αž˜αŸ’αž’αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž›αž·αž”αž·αž€αŸ’αžšαž˜αŸ”

αž…αŸ†αžŽαžΆαŸ†αŸ– αžŸαŸ†αžŽαž½αžšαžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž€αžΆαžšαž˜αž·αž“αž€αŸ‚αž”αŸ’αžšαŸ‚ αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αŸ†αžšαžΌ 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"αŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ Postgres αž“αžΉαž„αžŸαŸ’αž€αŸαž“αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ "idx_cust1" αž αžΎαž™β€‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€β€‹αž”αž“αŸ’αžβ€‹αž€αžΆαžšβ€‹αžŸαŸ’αžœαŸ‚αž„β€‹αžšαž€β€‹αž‡αž½αžšβ€‹αžαžΆαžšαžΆαž„β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž’αžΆαž“β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž“αŸƒβ€‹αž‡αž½αžšβ€‹αžˆαžšβ€‹αž•αŸ’αžŸαŸαž„β€‹αž‘αŸ€αž (αž€αŸ’αž“αž»αž„β€‹αž€αžšαžŽαžΈβ€‹αž“αŸαŸ‡ αž‡αž½αžšβ€‹αžˆαžš email) αžŠαŸ‚αž›αžŸαŸ†αžŽαž½αžšαžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ”

αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž“αŸ…αž€αŸ’αž“αž»αž„ PostgreSQL 11 αŸ” αž–αž½αž€αž‚αŸαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αž½αžšαžˆαžšαž”αž“αŸ’αžαŸ‚αž˜αž˜αž½αž™αž¬αž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž·αž”αž·αž€αŸ’αžšαž˜αžαŸ’αž›αž½αž“αžœαžΆ - αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αž·αž”αž·αž€αŸ’αžšαž˜αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž‘αžΆαž‰αž™αž€αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž–αžΈαž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡ αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αžαž˜αŸ’αž›αŸƒαž’αŸŠαžΈαž˜αŸ‚αž›αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž›αž·αž”αž·αž€αŸ’αžšαž˜ αž“αŸ„αŸ‡ Postgres αž“αžΉαž„αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαŸ’αžœαŸ‚αž„αžšαž€αžαžΆαžšαžΆαž„αžαž˜αŸ’αž›αŸƒαž‘αŸαŸ” 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 αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž’αžΆαž“β€‹αžαžΆαžšαžΆαž„αŸ”

αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚αžŠαžΎαž˜αžˆαžΎ B αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž€αžΆαžšαžαž·αžαžαŸ†αž”αŸ’αžšαžΉαž„αž”αŸ’αžšαŸ‚αž„αžαŸ‚αž‘αžΆαŸ†αž“αžΉαž„αžαŸ’αž–αžŸαŸ‹αž‡αžΆαž„αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž•αŸ’αž“αŸ‚αž€

αž›αž·αž”αž·αž€αŸ’αžšαž˜αž•αŸ’αž“αŸ‚αž€αžαŸ’αž›αŸ‡αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αžαŸ‚αžŸαŸ†αžŽαž»αŸ†αžšαž„αž“αŸƒαž‡αž½αžšαžŠαŸαž€αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžœαžΆαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αŸ†αž αŸ†αž“αŸƒαž›αž·αž”αž·αž€αŸ’αžšαž˜ αž“αž·αž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαžŸαŸ’αž€αŸαž“αž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“αŸ”

αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆαž™αžΎαž„αž…αž„αŸ‹αž‘αž‘αž½αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΈαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž’αŸŠαžΈαž˜αŸ‚αž›αžšαž”αžŸαŸ‹αž’αžαž·αžαž·αž‡αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžŠαŸ’αž‹αž€αžΆαž›αžΈαž αŸ’αžœαŸαžšαž‰αŸ‰αžΆαŸ” αž–αžΆαž€αŸ’αž™αžŸαž»αŸ†αž“αžΉαž„αž˜αžΆαž“αžŠαžΌαž…αž“αŸαŸ‡αŸ–

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. αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αžšαž€αžαŸ’αžŸαŸ‚αž—αžΆαž–αž™αž“αŸ’αžαž”αŸ‚αž”αž“αŸαŸ‡αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‡αž½αžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“ "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 αŸ”

αžαŸ„αŸ‡αž˜αžΎαž›αžαžΆαžαžΎαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ B-tree αž’αž˜αŸ’αž˜αžαžΆαž‡αž½αž™αž™αžΎαž„αž‘αŸαŸ–

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)

αž›αž·αž”αž·αž€αŸ’αžšαž˜αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž‚αž·αžαžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αŸ” αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ B-tree αž˜αž·αž“αžŠαžΉαž„αž–αžΈαž’αžαŸ’αžαž·αž—αžΆαž–αž“αŸƒαž’αžΆαžαž»αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„αžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αž‘αŸαŸ”

αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ 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)

Superset Index

αžœαžΆαž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž›αž·αž”αž·αž€αŸ’αžšαž˜αž‡αžΆαž…αŸ’αžšαžΎαž“ αžŠαŸ‚αž›αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž“αŸ„αŸ‡αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αžŸαŸ†αžŽαž»αŸ†αž›αžΎαžŸαž“αŸƒαž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž“αŸαŸ‡αž’αžΆαž…αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž…αž„αŸ‹αž”αžΆαž“ - αžŸαŸ†αžŽαž»αŸ†αžαžΆαž„αž›αžΎαž’αžΆαž…αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαžŸαŸ’αž€αŸαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚αž›αž·αž”αž·αž€αŸ’αžšαž˜ αžŠαŸ‚αž›αž‡αžΆαž€αžΆαžšαž›αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αŸ†αž αŸ†αž•αŸ’αž‘αž»αž€αž…αŸ’αžšαžΎαž“αž–αŸαž€ αž¬αžŸαŸ†αžŽαž½αžšαžŠαŸ‚αž›αžŸαŸ†αžŽαž»αŸ†αžαžΆαž„αž›αžΎαž˜αžΆαž“αž”αŸ†αžŽαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αŸ€αžαž‘αŸαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αž“αž·αž™αž˜αž“αŸαž™αž“αŸƒαž›αž·αž”αž·αž€αŸ’αžšαž˜αž”αŸ‚αž”αž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ 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 αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ B-Tree αž‚αžΊαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž αž€αž˜αŸ’αž˜αž€αžšαž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αž‡αžΆαž…αŸ’αžšαžΎαž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž™αŸ‰αžΆαž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ–

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

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸαŸ‡αžαž»αžŸαž–αžΈαž’αž˜αŸ’αž˜αžαžΆ αžŠαŸ‚αž›αžœαžΆαž˜αž·αž“αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž…αžΆαž€αŸ‹αžŸαŸ„αžšαž“αŸ…αž›αžΎαžαž» αž αžΎαž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž˜αž·αž“αžšαžΆαžšαžΆαŸ†αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŸαžšαžŸαŸαžšαž‘αŸαŸ” αž˜αŸ’αž™αŸ‰αžΆαž„αžœαž·αž‰αž‘αŸ€αž αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αžœαŸαž›αžΆ αž“αž·αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž’αžΆαž“αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αŸ”

Postgres αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž—αžΆαž–αž”αžαŸ‹αž”αŸ‚αž“αž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜ αž“αž·αž„αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αžšαžŽαžΈαž–αž·αžŸαŸαžŸαžŽαžΆαž˜αž½αž™ αž€αŸαžŠαžΌαž…αž‡αžΆαžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“αžαŸ’αž›αžΆαŸ†αž„αŸ” αž™αžΎαž„αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž‚αž“αŸ’αž›αžΉαŸ‡αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž±αŸ’αž™αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ†αžŽαž½αžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž αžΎαž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžšαž½αž…αžšαžΆαž›αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹