เชชเซเชธเซเชเชเซเชฐเซเชธ เชตเชฟเชถเซเชตเชฎเชพเช, เชกเซเชเชพเชฌเซเช เชธเซเชเซเชฐเซเช (เชเซเชจเซ "เชนเซเชช" เชเชนเซเชตเชพเชฏ เชเซ) เชจเชพ เชเชพเชฐเซเชฏเชเซเชทเชฎ เชจเซเชตเชฟเชเซเชถเชจ เชฎเชพเชเซ เชเชจเซเชกเซเชเซเชธ เชเชตเชถเซเชฏเช เชเซ. เชชเซเชธเซเชเชเซเชฐเซเชธ เชคเซเชจเชพ เชฎเชพเชเซ เชเซเชฒเชธเซเชเชฐเชฟเชเชเชจเซ เชธเชชเซเชฐเซเช เชเชฐเชคเซเช เชจเชฅเซ, เช
เชจเซ MVCC เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชคเชฎเชจเซ เชธเชฎเชพเชจ เชเซเชฏเซเชชเชฒเชจเชพ เชเชฃเชพ เชธเชเชธเซเชเชฐเชฃเซ เชธเชพเชฅเซ เชธเชฎเชพเชชเซเชค เชเชฐเชตเชพ เชฎเชพเชเซเชจเซเช เชเชพเชฐเชฃ เชฌเชจเซ เชเซ. เชคเซเชฅเซ, เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเซเชเซ เชเชชเชตเชพ เชฎเชพเชเซ เชเชพเชฐเซเชฏเชเซเชทเชฎ เช
เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเช เชฌเชจเชพเชตเชตเชพ เช
เชจเซ เชเชพเชณเชตเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชฌเชจเชตเซเช เชเซเชฌ เช เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ.
เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพเชเชจเชพ เชเชชเชฏเซเชเชจเซ เชเชชเซเชเชฟเชฎเชพเชเช เชเชฐเชตเชพ เช เชจเซ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชเซ เช เชนเซเช เชเซเชเชฒเซเช เชเซเชชเซเชธ เชเชชเซ เชเซ.
เชจเซเชเชง: เชจเซเชเซ เชฆเชฐเซเชถเชพเชตเซเชฒ เชเซเชตเซเชฐเซ เช
เชธเชเชถเซเชงเชฟเชค เชชเชฐ เชเชพเชฎ เชเชฐเซ เชเซ
เชเชตเชฐเชฟเชเช เชเชจเซเชกเซเชเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ
เชเชพเชฒเซ เชจเชฟเชทเซเชเซเชฐเชฟเชฏ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชฎเชพเชเซ เชเชฎเซเชเชฒ เชธเชฐเชจเชพเชฎเชพเช เชเชพเชขเชตเชพเชจเซ เชตเชฟเชจเชเชคเซ เชเซเชเช. เชเซเชฌเชฒ 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
) เชเซเชจเซ เชเซเชตเซเชฐเซ เชเชฐเซเชฐเซ เชเซ.
เชชเซเชธเซเชเชเซเชฐเซเชเชธเชเซเชฏเซเชเชฒ 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 เชจเซ เชเชพเชณเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชเซ.
เชเชตเชฐเชฟเชเช เชเชจเซเชกเซเชเซเชธ เชนเชพเชฒเชฎเชพเช เชฎเชพเชคเซเชฐ 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
. เชเชตเซ เชฌเชงเซ เชซเชฟเชฒเซเชฎเซ เชถเซเชงเชตเชพ เชฎเชพเชเซ, เชเชชเชฃเซ เชเซเชฏเชพเชฐเซ "เชชเชฆเชฆเชพ เชชเชพเชเชณ" เชนเซเชฏ เชคเซเชฏเชพเชฐเซ เชฌเชงเซ เชชเชเชเซเชคเชฟเช เชชเชธเชเชฆ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชเซเชเชชเชฃ เชเชฐเซ เชเชฟเชเชฎเชคเซ 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_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