PostgreSQL-āĻ āχāύāĻĄā§‡āĻ•ā§āϏ⧇āϰ āϏāĻŽāĻ¸ā§āϤ āĻ•ā§āώāĻŽāϤāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž

PostgreSQL-āĻ āχāύāĻĄā§‡āĻ•ā§āϏ⧇āϰ āϏāĻŽāĻ¸ā§āϤ āĻ•ā§āώāĻŽāϤāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž
āĻĒā§‹āĻ¸ā§āϟāĻ—ā§āϰ⧇āϏ āĻŦāĻŋāĻļā§āĻŦ⧇, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ (āϝāĻžāϕ⧇ āĻšāĻŋāĻĒ āĻŦāϞāĻž āĻšāϝāĻŧ) āĻĻāĻ•ā§āώāϤāĻžāϰ āϏāĻžāĻĨ⧇ āύ⧇āĻ­āĻŋāϗ⧇āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϏ⧂āϚāĻ•āϗ⧁āϞāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ Postgres āĻāϰ āϜāĻ¨ā§āϝ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰāĻŋāĻ‚ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ āύāĻž, āĻāĻŦāĻ‚ 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)

āϏ⧂āϚāĻ•āϟāĻŋāĻ“ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧāύāĻŋāĨ¤ āĻŦāĻŋ-āĻŸā§āϰāĻŋ āχāύāĻĄā§‡āĻ•ā§āϏ⧇āϰ āϏ⧂āĻšā§€āĻ•ā§ƒāϤ āĻŽāĻžāύāϗ⧁āϞāĻŋāϤ⧇ āĻĒ⧃āĻĨāĻ• āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋāϰ āĻ…āĻ¸ā§āϤāĻŋāĻ¤ā§āĻŦ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϕ⧋āύāĻ“ āϧāĻžāϰāĻŖāĻž āύ⧇āχāĨ¤

āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āϜāĻŋāφāχāĻāύ āϏ⧂āϚāĻ• āĻĻāϰāĻ•āĻžāϰāĨ¤

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)

āϜāĻŋāφāχāĻāύ āϏ⧂āϚāĻ• āĻ¸ā§āĻŦāϤāĻ¨ā§āĻ¤ā§āϰ āĻŽāĻžāύāϗ⧁āϞāĻŋāϕ⧇ āϏ⧂āĻšā§€āĻ•ā§ƒāϤ āϝ⧌āĻ—āĻŋāĻ• āĻŽāĻžāύāϗ⧁āϞāĻŋāϤ⧇ āĻŽā§āϝāĻžāĻĒ āĻ•āϰāϤ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇, āϝāĻžāϰ āĻĢāϞ⧇ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻžāϰ āĻ…āĻ°ā§āϧ⧇āϕ⧇āϰāĻ“ āĻŦ⧇āĻļāĻŋ āĻ–āϰāϚ āĻšāϝāĻŧāĨ¤

āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āϏ⧂āĻšā§€ āĻĒāϰāĻŋāĻ¤ā§āϰāĻžāĻŖ āĻĒāĻžāĻ“āϝāĻŧāĻž

āϏāĻŽāϝāĻŧ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āϏ⧂āϚāĻ•āϗ⧁āϞāĻŋ āϜāĻŽāĻž āĻšāϝāĻŧ, āĻāĻŦāĻ‚ āĻ•āĻ–āύāĻ“ āĻ•āĻ–āύāĻ“ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϏ⧂āϚāϕ⧇ āφāϗ⧇āϰāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋāϰ āĻŽāϤ⧋ āĻāĻ•āχ āϏāĻ‚āĻœā§āĻžāĻž āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻŽāĻžāύāĻŦ-āĻĒāĻžāĻ āϝ⧋āĻ—ā§āϝ 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-āĻ, 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

āĻāχ āϏ⧂āϚāĻ• āϤ⧈āϰāĻŋāϰ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āϏāĻžāϧāĻžāϰāϪ⧇āϰ āĻĨ⧇āϕ⧇ āφāϞāĻžāĻĻāĻž āϝ⧇ āĻāϟāĻŋāϤ⧇ āĻŸā§‡āĻŦāĻŋāϞāϟāĻŋ āϞāĻ• āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ āĻāĻŦāĻ‚ āϤāĻžāχ āϞ⧇āĻ–āĻžāϰ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϞāĻžāĻĒāϗ⧁āϞāĻŋāϕ⧇ āĻŦā§āϞāĻ• āĻ•āϰ⧇ āύāĻžāĨ¤ āĻ…āĻ¨ā§āϝāĻĻāĻŋāϕ⧇, āĻāϟāĻŋ āĻŦ⧇āĻļāĻŋ āϏāĻŽāϝāĻŧ āύ⧇āϝāĻŧ āĻāĻŦāĻ‚ āφāϰāĻ“ āϏāĻ‚āĻ¸ā§āĻĨāĻžāύ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤

āĻĒā§‹āĻ¸ā§āϟāĻ—ā§āϰ⧇āϏ āϕ⧋āύ⧋ āĻŦāĻŋāĻļ⧇āώ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϏ⧂āĻšā§€ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āύ⧇āĻ• āύāĻŽāύ⧀āϝāĻŧ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āĻŦāĻŋāĻ¸ā§āĻĢā§‹āϰāĻ•āĻ­āĻžāĻŦ⧇ āĻŦ⧃āĻĻā§āϧāĻŋ āĻĒ⧇āϞ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻžāϰ āωāĻĒāĻžāϝāĻŧāĻ“ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰ⧇āĨ¤ āφāĻŽāϰāĻž āφāĻļāĻž āĻ•āϰāĻŋ āĻāχ āϟāĻŋāĻĒāϏāϗ⧁āϞāĻŋ āφāĻĒāύāĻžāϕ⧇ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻļā§āύāϗ⧁āϞāĻŋāϕ⧇ āĻĻā§āϰ⧁āϤ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏāϕ⧇ āĻ¸ā§āϕ⧇āϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻŦ⧇⧎

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster