เดชเตเดธเตเดฑเตเดฑเตโเดเตเดฐเตเดธเต เดฒเตเดเดคเตเดคเต, เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดธเดเดญเดฐเดฃเด เดเดพเดฐเตเดฏเดเตเดทเดฎเดฎเดพเดฏเดฟ เดจเดพเดตเดฟเดเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดธเตเดเดฟเดเดเตพ เดจเดฟเตผเดฃเดพเดฏเดเดฎเดพเดฃเต (เดนเตเดชเตเดชเต เดเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจเต). Postgres เด
เดคเดฟเดจเตเดณเตเดณ เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดเดเดฟเดจเต เดชเดฟเดจเตเดคเตเดฃเดฏเตโเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ, 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
". เดเดคเดฟเดจเตผเดคเตเดฅเด 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 เดเดดเดฟเดตเดพเดเตเดเตเดจเตเดจเต.
เดเดจเตเดจเต, เดเดตเดฑเดฟเดเดเต เดเตปเดกเดเตเดธเตเดเตพ เดฌเดฟ-เดเตเดฐเตเดเตพเดเตเดเต เดฎเดพเดคเตเดฐเดฎเต เดฒเดญเตเดฏเดฎเดพเดเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เด เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ เด เดฑเตเดฑเดเตเดฑเตเดฑเดชเตเดชเดฃเดฟเดเตพ เดเตเดเตเดคเดฒเดพเดฏเดฟเดฐเดฟเดเตเดเตเด.
เดญเดพเดเดฟเด เดธเตเดเดฟเดเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต
เดญเดพเดเดฟเด เดธเตเดเดฟเด เดธเตเดเดฟเด เดชเดเตเดเดฟเดเดฏเตเดเต เดตเดฐเดฟเดเดณเตเดเต เดเดฐเต เดเดชเดตเดฟเดญเดพเดเด เดฎเดพเดคเตเดฐเด. เดธเตเดเดฟเดเดฏเตเดเต เดตเดฒเตเดชเตเดชเด เดธเดเดฐเดเตเดทเดฟเดเตเดเดพเดจเตเด เดตเตเดเดคเตเดคเดฟเตฝ เดธเตเดเดพเตป เดเตเดฏเตเดฏเดพเดจเตเด เดเดคเต เดจเดฟเดเตเดเดณเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต.
เดเดพเดฒเดฟเดซเตเตผเดฃเดฟเดฏเดฏเดฟเดฒเต เดเดเตเดเดณเตเดเต เดเดชเดญเตเดเตเดคเดพเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดเตเดเตพเดเตเดเต เดเดฎเตเดฏเดฟเตฝ เดตเดฟเดฒเดพเดธเดเตเดเดณเตเดเต เดเดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดฒเดญเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเตเดจเตเดจเต เดชเดฑเดฏเดพเด. เด เดญเตเดฏเตผเดคเตเดฅเดจ เดเดคเตเดชเตเดฒเตเดฏเดพเดฏเดฟเดฐเดฟเดเตเดเตเด:
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)
เดเตปเดกเตเดเตโเดธเต เดเตเดฏเตโเดค เดธเดเดฏเตเดเดฟเดค เดฎเตเดฒเตเดฏเดเตเดเดณเดฟเดฒเตเดเตเดเต เดตเตเดฏเดเตเดคเดฟเดเดค เดฎเตเดฒเตเดฏเดเตเดเตพ เดฎเดพเดชเตเดชเตเดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดเดฟเดเดเตป เดธเตเดเดฟเด เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดจเตเดจเต, เดเดคเต เด เดจเตเดตเตเดทเดฃ เดชเดฆเตเดงเดคเดฟเดฏเตเดเต เดชเดเตเดคเดฟเดฏเดฟเดฒเดงเดฟเดเด เดเตเดฒเดตเต เดจเตฝเดเตเดจเตเดจเต.
เดคเดจเดฟเดชเตเดชเดเตผเดชเตเดชเต เดธเตเดเดฟเดเดเตพ เดเดดเดฟเดตเดพเดเตเดเตเดจเตเดจเต
เดธเตเดเดฟเดเดเตพ เดเดพเดฒเดเตเดฐเดฎเตเดฃ เดเตเดฎเดฟเดเตเดเตเดเตเดเตเดจเตเดจเต, เดเดฟเดฒเดชเตเดชเตเตพ เดเดฐเต เดชเตเดคเดฟเดฏ เดธเตเดเดฟเดเดฏเดฟเตฝ เดฎเตเดฎเตเดชเดคเตเดคเต เดเดจเตเดจเดฟเดจเตเดฑเต เด
เดคเต เดจเดฟเตผเดตเดเดจเด เด
เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเดพเด. เดฎเดจเตเดทเตเดฏเตผเดเตเดเต เดตเดพเดฏเดฟเดเตเดเดพเดตเตเดจเตเดจ 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
เด เดธเตเดเดฟเด เดธเตเดทเตเดเดฟเดเตเดเตฝ เดจเดเดชเดเดฟเดเตเดฐเดฎเด เดธเดพเดงเดพเดฐเดฃเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฃเต, เดเดคเดฟเดจเต เดชเดเตเดเดฟเด เดฒเตเดเตเดเต เดเตเดฏเตเดฏเตเดฃเตเด เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ, เด เดคเดฟเดจเดพเตฝ เดเดดเตเดคเตเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเต เดคเดเดฏเตเดจเตเดจเดฟเดฒเตเดฒ. เดฎเดฑเตเดตเดถเดคเตเดคเต, เดเดคเต เดเตเดเตเดคเตฝ เดธเดฎเดฏเด เดเดเตเดเตเดเตเดเดฏเตเด เดเตเดเตเดคเตฝ เดตเดฟเดญเดตเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
เดเดคเตเดเตเดเดฟเดฒเตเด เดชเตเดฐเดคเตเดฏเตเด เดเตเดธเตเดเตพเดเตเดเตเดณเตเดณ เดธเตเดเดฟเดเดเดณเตเด เดชเดฐเดฟเดนเดพเดฐเดเตเดเดณเตเด เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต Postgres เดจเดฟเดฐเดตเดงเดฟ เดซเตเดฒเตเดเตเดธเดฟเดฌเดฟเตพ เดเดชเตเดทเดจเตเดเตพ เดจเตฝเดเตเดจเตเดจเต, เดเตเดเดพเดคเต เดจเดฟเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดธเตเดซเตเดเดจเดพเดคเตเดฎเดเดฎเดพเดฏเดฟ เดตเดณเดฐเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดฎเดพเดจเตเดเต เดเตเดฏเตเดฏเดพเดจเตเดณเตเดณ เดตเดดเดฟเดเดณเตเด เดจเตฝเดเตเดจเตเดจเต. เดจเดฟเดเตเดเดณเตเดเต เด
เดจเตเดตเตเดทเดฃเดเตเดเตพ เดตเตเดเดคเตเดคเดฟเดฒเดพเดเตเดเดพเดจเตเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดธเตเดเตเดฏเดฟเตฝ เดเตเดฏเตเดฏเดพเดจเตเด เด เดจเตเดฑเตเดเตเดเตเดเตพ เดธเดนเดพเดฏเดฟเดเตเดเตเดฎเตเดจเตเดจเต เดเดเตเดเตพ เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเต.
เด
เดตเดฒเดเดฌเด: www.habr.com