เปเบเปเบฅเบ Postgres, เบเบฑเบเบเบฐเบเบตเปเบกเปเบเบกเบตเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเบเบฒเบเบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบญเบเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบฒเบเบเปเปเบกเบนเบ (เปเบญเบตเปเบเบงเปเบฒ "heap"). Postgres เบเปเปเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฒเบเบเบฑเบเบเบธเปเบกเบชเปเบฒเบฅเบฑเบเบกเบฑเบ, เปเบฅเบฐเบชเบฐเบเบฒเบเบฑเบเบเบฐเบเบฐเบเปเบฒ MVCC เปเบฎเบฑเบเปเบซเปเบเปเบฒเบเบชเบดเปเบเบชเบธเบเบเปเบงเบ tuple เบเบฝเบงเบเบฑเบเบซเบผเบฒเบเบฎเบธเปเบ. เบเบฑเปเบเบเบฑเปเบ, เบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบเบซเบผเบฒเบเบเบตเปเบเบฐเบชเบฒเบกเบฒเบเบชเปเบฒเบเปเบฅเบฐเบฎเบฑเบเบชเบฒเบเบฑเบเบชเบฐเบเบตเบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบเบทเปเบญเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ.
เบเบตเปเปเบกเปเบเบเปเบฒเปเบเบฐเบเปเบฒเบเบฒเบเบขเปเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบฅเบฐเบเบฒเบเบเบฑเบเบเบธเบเบเบฒเบเบเปเบฒเปเบเปเบเบฑเบเบชเบฐเบเบต.
เบซเบกเบฒเบเปเบซเบ: เบเปเบฒเบเบฒเบกเบเบตเปเบชเบฐเปเบเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบ unmodified
เบเบฒเบโเบเปเบฒโเปเบเปโเบเบฑเบโเบเบฐโเบเบตโเบเบฒเบโเบเบปเบโเบซเบธเปเบกโเบเบญเบโ
เปเบซเปเปเบเบดเปเบเบเปเบฒเบฎเปเบญเบเบเปเปเบเบทเปเบญเปเบเบเบเบตเปเบขเบนเปเบญเบตเปเบกเบงเบชเปเบฒเบฅเบฑเบเบเบนเปเปเบเปเบเบตเปเบเปเปเบกเบตเบเบฒเบเปเบเบทเปเบญเบเปเบซเบง. เบเบฒเบเบฐเบฅเบฒเบ 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
", เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเบทเบเบเปเปเบเบญเบเบซเบฒ heap เบเบฒเบเบฐเบฅเบฒเบเปเบเบทเปเบญเบญเปเบฒเบเบเปเบฒเบเบญเบเบเบฑเบเบญเบทเปเบเป (เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบฑเบ. email
) เบเบตเปโเบเบฒเบโเบชเบญเบโเบเบฒเบกโเบเปเบญเบโเบเบฒเบโ.
เบเบฒเบเบเบปเบเบซเบธเปเบกเบเบญเบเบเบฑเบเบเบฐเบเบตเปเบกเปเบเปเบเปเบเปเบฒเบชเบฐเปเบซเบเบตเปเบ PostgreSQL 11. เบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบเบฐเบเบญเบเบซเบเบถเปเบเบซเบผเบทเบซเบผเบฒเบเบเปเบฅเปเบฒเปเบเบตเปเบกเปเบเบตเบกเปเบเบเบฑเบเบเบฐเบเบตเบเบปเบงเบกเบฑเบเปเบญเบ - เบกเบนเบเบเปเบฒเบเบญเบเบเบงเบเบกเบฑเบเบเบทเบเปเบเบฑเบเปเบงเปเปเบเบเปเบญเบเปเบเบฑเบเบเปเปเบกเบนเบเบเบฑเบเบชเบฐเบเบต.
เบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฐเปเบซเบเบเบเบฒเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบตเปเปเบฅเบฐเปเบเบตเปเบกเบกเบนเบเบเปเบฒเบญเบตเปเบกเบฅเปเบเบฒเบเปเบเบเบฑเบเบชเบฐเบเบต, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ Postgres เบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบปเปเบเบซเบฒ heap เบเบฒเบเบฐเบฅเบฒเบเบชเปเบฒเบฅเบฑเบเบกเบนเบเบเปเบฒ. 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
' เบเบญเบเบเบงเบเปเบฎเบปเบฒเบงเปเบฒ query เปเบเบเบฑเบเบเบธเบเบฑเบเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบเบเบฑเบเบชเบฐเบเบต, เปเบเบดเปเบเบเปเบงเบเบซเบฅเบตเบเบฅเปเบฝเบ disk I/O เบเบฑเบเบซเบกเบปเบเปเบเบทเปเบญเบญเปเบฒเบ heap เบเบฒเบเบฐเบฅเบฒเบ.
เบเบฑเบเบเบฐเบเบตเบเบฒเบเบเบปเบเบเบธเบกเปเบกเปเบเบกเบตเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบ B-trees เปเบเบปเปเบฒเบเบฑเปเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเบเปเบฒเบฅเบธเบเบฎเบฑเบเบชเบฒเบเบฐเบชเบนเบเบเบถเปเบ.
เบเบฒเบโเบเปเบฒโเปเบเปโเบเบฑเบโเบเบฐโเบเบตโเบเบฒเบโเบชเปเบงเบโ
เบเบฑเบเบชเบฐเบเบตเบเบฒเบเบชเปเบงเบเบเบฝเบเปเบเปเบเบฑเบเบชเบฐเบเบตเบเปเบญเบเบเบญเบเปเบเบงเปเบเบเบฒเบเบฐเบฅเบฒเบ. เบเบตเปเบเปเบงเบเบเบฐเบขเบฑเบเบเบฐเบซเบเบฒเบเบเบญเบเบเบฑเบเบชเบฐเบเบตเปเบฅเบฐเปเบฎเบฑเบเปเบซเปเบเบฒเบเบชเบฐเปเบเบเปเบงเบเบถเปเบ.
เปเบซเปเปเบงเบปเปเบฒเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเปเบเปเบฎเบฑเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเบเบตเปเบขเบนเปเบญเบตเปเบกเบงเบเบญเบเบฅเบนเบเบเปเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบเบฒเบฅเบดเบเปเปเบเบ. เบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบฐโเปเบเบฑเบโเบเบฑเปเบโเบเบตเปโ:
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)
Scan address
เปเบเปเบเบทเบเปเบเบเบเบตเปเปเบเบเบเบฒเบเบชเบฐเปเบเบเบเบฑเบเบชเบฐเบเบต idx_address1
เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเบฐเปเบเบ heap 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
.
เบเบฒเบโเบเปเบฒโเปเบเปโเบเบฑเบโเบเบฐโเบเบตโเบซเบผเบฒเบโเบเบธเบโเบเปเบฒโ
เบเบฒเบเบเบฑเบเบเบตเปเบเบฐเบเบทเบเบเบฑเบเบชเบฐเบเบตเบญเบฒเบเบเบฐเบเปเปเบกเบตเบเบฐเปเบเบเบเปเปเบกเบนเบ scalar. เบเบฐเปเบเบเบเบฑเบเปเบเบฑเปเบ jsonb
, arrays
ะธ tsvector
เบกเบตเบเปเบฒเบเบฐเบชเบปเบก เบซเบผเบทเบซเบผเบฒเบเบเปเบฒ. เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบฑเบเบชเบฐเบเบตเบเปเบฅเปเบฒเบเบฑเปเบเบเปเบฒเบง, เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเบเปเบฒเบเบเปเบญเบเบเบปเปเบเบซเบฒเบกเบนเบเบเปเบฒเบชเปเบงเบเบเบธเบเบเบปเบเบเบฑเบเบซเบกเบปเบเปเบเบเปเบฅเปเบฒเปเบซเบผเบปเปเบฒเบเบฑเปเบ.
เปเบซเปเบเบฐเบเบฒเบเบฒเบกเบเบญเบเบซเบฒเบซเบปเบงเบเปเปเบเบญเบเบฎเบนเบเปเบเบปเบฒเบเบฑเบเบซเบกเบปเบเบเบตเปเบกเบตเบเบฒเบเบเบฑเบเบเบฒเบเบเบฒเบเปเบเปเปเบงเบฅเบฒเบเบตเปเบเปเปเบชเปเบฒเปเบฅเบฑเบ. เบเบฒเบเบฐเบฅเบฒเบ film
เบกเบตเบเบฑเบเบเปเปเบเบงเบฒเบกเบเบตเปเปเบญเบตเปเบเบงเปเบฒ special_features
. เบเปเบฒเบฎเบนเบเปเบเบปเบฒเบกเบต "เบเบธเบเบชเบปเบกเบเบฑเบเบเบดเปเบชเบ", เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฅเปเบฒเบเบฐเบเบญเบเบเปเบงเบเบญเบปเบเบเบฐเบเบญเบเปเบเบฑเบ array เบเปเปเบเบงเบฒเบก Behind The Scenes
. เปเบเบทเปเบญเบเบญเบเบซเบฒเบฎเบนเบเปเบเบปเบฒเบเบฑเปเบเบเปเบฒเบงเบเบฑเบเบซเบกเบปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฅเบทเบญเบเปเบเบงเบเบฑเบเบซเบกเบปเบเบเบตเปเบกเบต "Behind The Scenes" เปเบเปเบงเบฅเบฒเบเบตเป เปเบเป เบเปเบฒ array 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)
เปเบเบดเปเบเบฎเปเบญเบเบเปเบเบฒเบเบชเบฐเปเบเบ heap เปเบเบฑเบกเบเบตเปเบกเบตเบเปเบฒเปเบเปเบเปเบฒเบ 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
เบกเบฑเบเบชเบฒเบกเบฒเบเปเบเบตเบเบเบทเปเบเปเบเปเบงเปเบฒเบเปเบฒเบเบชเบดเปเบเบชเบธเบเบเปเบงเบเบเบฑเบเบชเบฐเบเบตเบซเบผเบฒเบ, เบซเบเบถเปเบเปเบเบเบฑเปเบเบเบฑเบเบชเบฐเบเบต superset เบเบญเบเบเบฑเบเบเบตเปเบเบฑเบเบชเบฐเบเบตเบเบฑเบเบชเบฐเบเบตเบญเบทเปเบเป. เบญเบฑเบเบเบตเปเบญเบฒเบเบเบฐเบเปเบญเบเบเบฒเบ เบซเบผเบทเบญเบฒเบเบเบฐเบเปเปเบขเบฒเบเปเบเป - เบเบธเบเปเบเบตเปเบเบเบญเบฒเบเบเบฐเบชเบปเปเบเบเบปเบเปเบซเปเบกเบตเบเบฒเบเบชเบฐเปเบเบเปเบเบเบเบฑเบเบชเบฐเบเบตเปเบเบปเปเบฒเบเบฑเปเบ, เปเบเบดเปเบเปเบเบฑเบเบชเบดเปเบเบเบตเปเบเบต, เปเบเปเบกเบฑเบเบญเบฒเบเบเบฐเปเบเปเบเบทเปเบเบเบตเปเบซเบผเบฒเบเปเบเบตเบเปเบ, เบซเบผเบทเบเบฒเบเบชเบญเบเบเบฒเบกเบเบตเป superset เบกเบตเบเบธเบเบเบฐเบชเบปเบเปเบเบทเปเบญเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบฐเบเปเปเบเบทเบเปเบเปเบญเบตเบเบเปเปเปเบ.
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเปเบฒเบเบดเบเบฒเบกเบเบญเบเบเบฑเบเบชเบฐเบเบตเบเบฑเปเบเบเปเบฒเบง, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบ pg_catalog
.
เบเบฑเบเบเบฐเบเบตเบเบตเปเบเปเปเปเบเปเปเบเป
เปเบเบทเปเบญเบเบเบฒเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเปเบเปเบเบฒเบเบเปเปเบกเบนเบเบเบฑเบเบเบฐเบเบฒ, เบเบฑเปเบเบเบฑเปเบเบเบฒเบเบชเบญเบเบเบฒเบกเบเบตเปเบเบงเบเปเบเบปเบฒเปเบเป. เบเบฑเบเบเบฐเบเบตเบเบตเปเปเบเบตเปเบกเปเบชเปเบเปเบญเบเปเปเบฒเบเบตเปเบญเบฒเบเบเบฐเบเปเปเบเบทเบเปเบเปเปเบเบเบเบฒเบเบชเบญเบเบเบฒเบกเปเบเป. เปเบเปเบฅเบฐเบเบฑเปเบเบเบตเปเบเบฑเบเบชเบฐเบเบตเบเบทเบเบชเบฐเปเบเบ, เบกเบฑเบเบเบทเบเบซเบกเบฒเบเปเบเบเบเบนเปเบเบฑเบเบเบฒเบเบชเบฐเบเบดเบเบด, เปเบฅเบฐเปเบเบกเบธเบกเบกเบญเบเบเบญเบเบฅเบฐเบเบปเบ pg_stat_user_indexes
เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบกเบนเบเบเปเบฒ idx_scan
, เปเบเบดเปเบเปเบเบฑเบเบเบปเบงเบเบฑเบเบชเบฐเบชเบปเบก. เบเบฒเบเบเบดเบเบเบฒเบกเบกเบนเบเบเปเบฒเบเบตเปเปเบเปเบฅเบเบฐเปเบงเบฅเบฒ (เปเบงเบปเปเบฒเปเบเบฑเบเปเบเบทเบญเบ) เบเบฐเปเบซเปเบเบงเบฒเบกเบเบดเบเบเบตเปเบเบตเบเบญเบเบเบฑเบเบชเบฐเบเบตเบเบตเปเบเปเปเปเบเปเบเบทเบเบเปเบฒเปเบเปเปเบฅเบฐเบญเบฒเบเบเบฐเบเบทเบเบซเบผเบธเบเบฅเบปเบ.
เบเบตเปเปเบกเปเบเบเบฒเบเบชเบญเบเบเบฒเบกเปเบเบทเปเบญเบฎเบฑเบเปเบญเบปเบฒเบเบฒเบเบชเบฐเปเบเบเบเบฑเบเบเบธเบเบฑเบเบเบญเบเบเบฑเบเบเบฐเบเบตเบเบฑเบเปเบปเบเปเบ schema โ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