เดฎเดพเดธเด เดฎเตเดฎเตเดชเต
เดจเดฟเดเตเดเตพ เดเดคเต เดเดคเดฟเดจเดเด 6000-เดฒเดงเดฟเดเด เดคเดตเดฃ เดเดชเดฏเตเดเดฟเดเตเดเต, เดเดจเตเดจเดพเตฝ เดถเตเดฐเดฆเตเดงเดฟเดเตเดเดชเตเดชเตเดเดพเดคเต เดชเตเดฏเตเดเตเดเดพเดตเตเดจเตเดจ เดเดฐเต เดนเดพเตปเดกเดฟ เดซเตเดเตเดเตผ เดเดเดจเดพเดชเดฐเดฎเดพเดฏ เดธเตเดเดจเดเตพ, เดเดคเต เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต:
เด
เดต เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเด, เดจเดฟเดเตเดเดณเตเดเต เด
เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ "เดฎเดฟเดจเตเดธเดฎเดพเตผเดจเตเดจเดคเตเด เดธเดฟเตฝเดเตเดเดฟ เดเดฏเดฟ เดฎเดพเดฑเตเด." ๐
เดเดจเตเดจเดพเตฝ เดเตเดฐเดตเดฎเดพเดฏเดฟ, เดเดฐเต เด เดญเตเดฏเตผเดคเตเดฅเดจ เดฎเดจเตเดฆเดเดคเดฟเดฏเดฟเดฒเดพเดเตเดเตเดจเตเดจเดคเตเด เดตเดฟเดญเดต-เดฆเดพเดนเด เดเดฃเตเดเดพเดเตเดเตเดจเตเดจเดคเตเดฎเดพเดฏ เดชเดฒ เดธเดพเดนเดเดฐเตเดฏเดเตเดเดณเตเด เดธเดพเดงเดพเดฐเดฃเดตเตเด เดชเตเดฒเดพเดจเดฟเดจเตเดฑเต เดเดเดจเดฏเตเด เดกเดพเดฑเตเดฑเดฏเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเตป เดเดดเดฟเดฏเตเด.
เด เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดฐเต เดตเตเดฏเดเตเดคเดฟเดเดค เดกเตเดตเดฒเดชเตเดชเตผเดเตเดเตเด เดธเตเดตเดจเตเดคเด เด เดจเตเดญเดตเดคเตเดคเต เดฎเดพเดคเตเดฐเด เดเดถเตเดฐเดฏเดฟเดเตเดเต เดเดฐเต เดเดชเตเดฑเตเดฑเดฟเดฎเตเดธเตเดทเตป เดเดชเตเดทเตป เดจเตเดเตเดเตเดฃเตเดเดคเดฟเดฒเตเดฒ - เดเดตเดฟเดเต เดเดจเตเดคเดพเดฃเต เดธเดเดญเดตเดฟเดเตเดเตเดจเตเดจเดคเตเดจเตเดจเต เดจเดฎเตเดเตเดเต เด เดตเดจเตเดเต เดชเดฑเดฏเดพเตป เดเดดเดฟเดฏเตเด, เดเดพเดฐเดฃเด เดเดจเตเดคเดพเดฏเดฟเดฐเดฟเดเตเดเดพเด, เดเตเดเดพเดคเต เดเดฐเต เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเต เดเดเตเดเดจเต เดธเดฎเตเดชเดฟเดเตเดเดพเด. เด เดคเดพเดฃเต เดเดเตเดเตพ เดเตเดฏเตเดคเดคเต.
เด เดเตเดธเตเดเตพ เดจเดฎเตเดเตเดเต เดธเตเดเตเดทเตเดฎเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเด - เด
เดต เดเดเตเดเดจเต เดจเดฟเตผเดตเดเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต, เด
เดต เดเดจเตเดคเต เดถเตเดชเดพเตผเดถเดเดณเดฟเดฒเตเดเตเดเต เดจเดฏเดฟเดเตเดเตเดจเตเดจเต.
เดตเดฟเดทเดฏเดคเตเดคเดฟเตฝ เดจเดจเตเดจเดพเดฏเดฟ เดฎเตเดดเตเดเตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเดเตเดเตพเดเตเดเต เดเดฆเตเดฏเด เดฌเดจเตเดงเดชเตเดชเตเดเตเด เดฌเตเดฒเตเดเตเดเต เดเตเตพเดเตเดเดพเด
#1: เดธเตเดเดฟเด "เด เดฃเตเดเตผเดธเตเตผเดเตเดเดฟเดเดเต"
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
"LLC Kolokolchik" เดเดจเตเดจ เดเตเดฒเดฏเดจเตเดฑเดฟเดจเดพเดฏเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด เดชเตเดคเดฟเดฏ เดเตปเดตเตเดฏเตเดธเต เดเดพเดฃเดฟเดเตเดเตเด.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> Limit
-> Sort
-> Index [Only] Scan [Backward] | Bitmap Heap Scan
เดถเตเดชเดพเตผเดถเดเตพ
เดเดชเดฏเตเดเดฟเดเตเด เดธเตเดเดฟเด เด เดเตเดเตเดเดฟเดฏ เดซเตเตฝเดกเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเด.
เดเดฆเดพเดนเดฐเดฃเด:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, (random() * 1000)::integer fk_cli; -- 1K ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
CREATE INDEX ON tbl(fk_cli); -- ะธะฝะดะตะบั ะดะปั foreign key
SELECT
*
FROM
tbl
WHERE
fk_cli = 1 -- ะพัะฑะพั ะฟะพ ะบะพะฝะบัะตัะฝะพะน ัะฒัะทะธ
ORDER BY
pk DESC -- ั
ะพัะธะผ ะฒัะตะณะพ ะพะดะฝั "ะฟะพัะปะตะดะฝัั" ะทะฐะฟะธัั
LIMIT 1;
เดธเตเดเดฟเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต 100-เดฒเดงเดฟเดเด เดฑเตเดเตเดเตเตผเดกเตเดเตพ เดเตเดฑเดเตเดเดคเดพเดฏเดฟ เดจเดฟเดเตเดเตพเดเตเดเต เดเดเดจเดเดฟ เดถเตเดฐเดฆเตเดงเดฟเดเตเดเดพเดจเดพเดเตเด, เด เดตเดฏเตเดฒเตเดฒเดพเด เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเต, เดคเตเดเตผเดจเตเดจเต เด เดตเดถเตเดทเดฟเดเตเดเดคเต.
เดคเดฟเดฐเตเดคเตเดคเตเดจเตเดจเต:
DROP INDEX tbl_fk_cli_idx;
CREATE INDEX ON tbl(fk_cli, pk DESC); -- ะดะพะฑะฐะฒะธะปะธ ะบะปัั ัะพััะธัะพะฒะบะธ
เด
เดคเตเดคเดฐเดฎเตเดฐเต เดชเตเดฐเดพเดเตเดค เดฎเดพเดคเตเดเดฏเดฟเตฝ เดชเตเดฒเตเด - 8.5 เดฎเดเดเตเดเต เดตเตเดเดคเดฏเตเด 33 เดฎเดเดเตเดเต เดเตเดฑเดตเต เดตเดพเดฏเดจเดฏเตเด. เดเดฐเต เดฎเตเดฒเตเดฏเดคเตเดคเดฟเดจเตเด เดจเดฟเดเตเดเตพเดเตเดเต เดเตเดเตเดคเตฝ "เดตเดธเตเดคเตเดคเดเตพ" เดเดฃเตเดเต, เดเตเดเตเดคเตฝ เดตเตเดฏเดเตเดคเดฎเดพเดฏ เดชเตเดฐเดญเดพเดตเด fk
.
เด
เดคเตเดคเดฐเด เดเดฐเต เดธเตเดเดฟเด เดฎเดฑเตเดฑเต เดเตเดฆเตเดฏเดเตเดเตพเดเตเดเต เดฎเตเดฎเตเดชเดคเตเดคเตเดเตเดเดพเตพ เดฎเตเดถเดฎเดฒเตเดฒเดพเดคเตเดค เดเดฐเต "เดชเตเดฐเดฟเดซเดฟเดเตเดธเต" เดธเตเดเดฟเดเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดฎเตเดจเตเดจเต เดเดพเตป เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดจเตเดจเต. fk
, เดเดตเดฟเดเต เด
เดเตเดเตเดเตเด pk
เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดฒเตเดฒ, เดเดฒเตเดฒ (เดเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เดเตเดเตเดคเตฝ เดตเดพเดฏเดฟเดเตเดเดพเด
#2: เดธเตเดเดฟเด เดเดตเดฒ (เดฌเดฟเดฑเตเดฑเตเดฎเดพเดชเตเดชเต เดเตปเดกเต)
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
"NAO เดฌเดเตเดเตผเดเดชเตเดชเดฟเดจเต" เดตเตเดฃเตเดเดฟ เดธเดฎเดพเดชเดฟเดเตเด "LLC Kolokolchik" เดเดจเตเดจ เดเตเดฒเดฏเดจเตเดฑเดฟเดจเดพเดฏเตเดณเตเดณ เดเดฒเตเดฒเดพ เดเดฐเดพเดฑเตเดเดณเตเด เดเดพเดฃเดฟเดเตเดเตเด.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> BitmapAnd
-> Bitmap Index Scan
-> Bitmap Index Scan
เดถเตเดชเดพเตผเดถเดเตพ
เดธเตเดทเตเดเดฟเดเตเดเตเด เดธเดเดฏเตเดเดฟเดค เดธเตเดเดฟเด เดฐเดฃเตเดเต เดเดฑเดฟเดเดฟเดจเตฝ เดซเตเตฝเดกเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณเดตเดฏเดฟเตฝ เดเดจเตเดจเต เดฐเดฃเตเดเดพเดฎเดคเตเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดซเตเตฝเดกเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเด.
เดเดฆเดพเดนเดฐเดฃเด:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, (random() * 100)::integer fk_org -- 100 ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
, (random() * 1000)::integer fk_cli; -- 1K ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
CREATE INDEX ON tbl(fk_org); -- ะธะฝะดะตะบั ะดะปั foreign key
CREATE INDEX ON tbl(fk_cli); -- ะธะฝะดะตะบั ะดะปั foreign key
SELECT
*
FROM
tbl
WHERE
(fk_org, fk_cli) = (1, 999); -- ะพัะฑะพั ะฟะพ ะบะพะฝะบัะตัะฝะพะน ะฟะฐัะต
เดคเดฟเดฐเตเดคเตเดคเตเดจเตเดจเต:
DROP INDEX tbl_fk_org_idx;
CREATE INDEX ON tbl(fk_org, fk_cli);
เดฌเดฟเดฑเตเดฑเตโเดฎเดพเดชเตเดชเต เดนเตเดชเตเดชเต เดธเตเดเดพเตป เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เดซเดฒเดชเตเดฐเดฆเดฎเดพเดเตเดฎเตเดจเตเดจเดคเดฟเดจเดพเตฝ เดเดตเดฟเดเต เดชเตเดฐเดคเดฟเดซเดฒเด เดเตเดฑเตเดคเดพเดฃเต. เดเดจเตเดจเดพเตฝ เดเดจเตเดคเดพเดฏเดพเดฒเตเด 7 เดฎเดเดเตเดเต เดตเตเดเดคเดฏเตเด 2.5 เดฎเดเดเตเดเต เดเตเดฑเดตเต เดตเดพเดฏเดจเดฏเตเด.
#3: เดธเตเดเดฟเดเดเตพ เดฒเดฏเดฟเดชเตเดชเดฟเดเตเดเตเด (BitmapOr)
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
เดจเดฟเดเตเดเดณเตเดเตเดคเต เดฎเตเตปเดเดฃเดจเดฏเดฟเตฝ, เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเดฟเดจเดพเดฏเดฟ เดเดฑเตเดฑเดตเตเด เดชเดดเดฏ 20 "เดเดเตเดเตพ" เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เด เดธเตเตป เดเตเดฏเตเดฏเดพเดคเตเดค เด เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ เดเดพเดฃเดฟเดเตเดเตเด.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> BitmapOr
-> Bitmap Index Scan
-> Bitmap Index Scan
เดถเตเดชเดพเตผเดถเดเตพ
เดเดชเดฏเตเดเดฟเดเตเดเตเด เดฏเตเดฃเดฟเดฏเตป [เดเดฒเตเดฒเดพเด] เดตเตเดฏเดตเดธเตเดฅเดเดณเตเดเต เดเดฐเต OR-เดฌเตเดฒเตเดเตเดเตเดเตพเดเตเดเตเด เดธเดฌเตเดเตเดตเดฑเดฟเดเตพ เดธเดเดฏเตเดเดฟเดชเตเดชเดฟเดเตเดเดพเตป.
เดเดฆเดพเดนเดฐเดฃเด:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, CASE
WHEN random() < 1::real/16 THEN NULL -- ั ะฒะตัะพััะฝะพัััั 1:16 ะทะฐะฟะธัั "ะฝะธััั"
ELSE (random() * 100)::integer -- 100 ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
END fk_own;
CREATE INDEX ON tbl(fk_own, pk); -- ะธะฝะดะตะบั ั "ะฒัะพะดะต ะบะฐะบ ะฟะพะดั
ะพะดััะตะน" ัะพััะธัะพะฒะบะพะน
SELECT
*
FROM
tbl
WHERE
fk_own = 1 OR -- ัะฒะพะธ
fk_own IS NULL -- ... ะธะปะธ "ะฝะธััะธ"
ORDER BY
pk
, (fk_own = 1) DESC -- ัะฝะฐัะฐะปะฐ "ัะฒะพะธ"
LIMIT 20;
เดคเดฟเดฐเตเดคเตเดคเตเดจเตเดจเต:
(
SELECT
*
FROM
tbl
WHERE
fk_own = 1 -- ัะฝะฐัะฐะปะฐ "ัะฒะพะธ" 20
ORDER BY
pk
LIMIT 20
)
UNION ALL
(
SELECT
*
FROM
tbl
WHERE
fk_own IS NULL -- ะฟะพัะพะผ "ะฝะธััะธ" 20
ORDER BY
pk
LIMIT 20
)
LIMIT 20; -- ะฝะพ ะฒัะตะณะพ - 20, ะฑะพะปััะต ะธ ะฝะต ะฝะฐะดะพ
เดเดตเดถเตเดฏเดฎเดพเดฏ เดเดฒเตเดฒเดพ 20 เดฑเตเดเตเดเตเตผเดกเตเดเดณเตเด เดเดฆเตเดฏ เดฌเตเดฒเตเดเตเดเดฟเตฝ เดเดเดจเดเดฟ เดฒเดญเดฟเดเตเดเต เดเดจเตเดจ เดตเดธเตเดคเตเดค เดเดเตเดเตพ เดชเตเดฐเดฏเตเดเดจเดชเตเดชเตเดเตเดคเตเดคเดฟ, เด เดคเดฟเดจเดพเตฝ เดฐเดฃเตเดเดพเดฎเดคเตเดคเตเดคเต, เดเตเดเตเดคเตฝ โเดตเดฟเดฒเดฏเตเดฑเดฟเดฏโ เดฌเดฟเดฑเตเดฑเตเดฎเดพเดชเตเดชเต เดนเตเดชเตเดชเต เดธเตเดเดพเตป เดเดชเดฏเตเดเดฟเดเตเดเต, เดเดเตเดธเดฟเดเตเดฏเตเดเตเดเต เดเตเดฏเตเดคเดฟเดฒเตเดฒ - เด เดตเดธเดพเดจเด 22 เดฎเดเดเตเดเต เดตเตเดเดคเตเดคเดฟเตฝ, 44 เดฎเดเดเตเดเต เดเตเดฑเดตเต เดตเดพเดฏเดจเดเตพ!
เด เดเดชเตเดฑเตเดฑเดฟเดฎเตเดธเตเดทเตป เดฐเตเดคเดฟเดฏเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดเตเดเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เดเดฅ เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดเดฆเดพเดนเดฐเดฃเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดฒเตเดเดจเดเตเดเดณเดฟเตฝ เดตเดพเดฏเดฟเดเตเดเดพเด
PostgreSQL เดเดจเตเดฑเดฟเดชเดพเดฑเตเดฑเตเดฃเตเดเตพ: เดนเดพเดจเดฟเดเดฐเดฎเดพเดฏ เดเตเดฏเดฟเดจเตเดเดณเตเด OR-เดเดณเตเด ะธPostgreSQL เดเดจเตเดฑเดฟเดชเดพเดฑเตเดฑเตเดฃเตเดเตพ: เดชเตเดฐเดฟเดจเดพเตฝ เดคเดฟเดฐเดฏเดฒเดฟเดจเตเดฑเต เดเดตเตผเดคเตเดคเดจ เดชเดฐเดฟเดทเตเดเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดเดฅ, เด เดฒเตเดฒเตเดเตเดเดฟเตฝ "เด เดเตเดเตเดเตเดเตเด เดเดเตเดเตเดเตเดเตเด เดเดชเตเดฑเตเดฑเดฟเดฎเตเดธเตเดทเตป" .เดชเตเดคเตเดตเดพเดฏ เดชเดคเดฟเดชเตเดชเต เดจเดฟเดฐเดตเดงเดฟ เดเตเดเตพ เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟเดฏเตเดณเตเดณ เดคเดฟเดฐเดเตเดเตเดเตเดชเตเดชเต เดเตผเดกเตผ เดเตเดฏเตเดคเต (เดเดชเตเดชเด const/NULL เดเตเดกเดฟ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ) เดฒเตเดเดจเดคเตเดคเดฟเตฝ เดเตผเดเตเดเดเตเดฏเตเดฏเตเดจเตเดจเต
SQL เดเดเตเดเดจเต: เดเตเดฆเตเดฏเดคเตเดคเดฟเตฝ เดจเตเดฐเดฟเดเตเดเต เดเดฐเต เดฒเตเดชเตเดชเต เดเดดเตเดคเตเด, เด เดฒเตเดฒเตเดเตเดเดฟเตฝ "เดเดฒเดฟเดฎเตเดจเตเดฑเดฑเดฟ เดคเตเดฐเต-เดธเตเดฑเตเดฑเตเดชเตเดชเต" .
#4: เดจเดฎเตเดฎเตพ เด เดจเดพเดตเดถเตเดฏเดฎเดพเดฏ เดเดฐเตเดชเดพเดเต เดเดพเดฐเตเดฏเดเตเดเตพ เดตเดพเดฏเดฟเดเตเดเตเดจเตเดจเต
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
เดเดฐเต เดเดเตเดเด เดชเตเดฒเต, เดเดคเดฟเดจเดเด เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดเดฐเต เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเดฒเตเดเตเดเต "เดฎเดฑเตเดฑเตเดฐเต เดซเดฟเตฝเดเตเดเตผ เด เดฑเตเดฑเดพเดเตเดเตเดเตเดฏเตเดฏเดพเตป" เดจเดฟเดเตเดเตพ เดเดเตเดฐเดนเดฟเดเตเดเตเดฎเตเดชเตเตพ เด เดคเต เดเดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต.
โเดจเดฟเดเตเดเตพเดเตเดเดฟเดฒเตเดฒ, เดชเดเตเดทเต เดฎเดฆเตผ เดเดซเต เดชเตเตพ เดฌเดเตเดเดฃเตเดเตพเดเตเดเตเดชเตเดชเด? เดธเดฟเดจเดฟเดฎ "เดฆเดฟ เดกเดฏเดฎเดฃเตเดเต เดเด"
เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฎเตเดเดณเดฟเดฒเตเดณเตเดณ เดเดพเดธเตโเดเต เดชเดฐเดฟเดทเตโเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเดเต, เด เดตเดฏเตเดเต เดเดฆเตเดฆเตเดถเตเดฏเด เดชเดฐเดฟเดเดฃเดฟเดเตเดเดพเดคเต เดคเดจเตเดจเต เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเดฟเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด เดชเดดเดฏ 20 "เดจเดฟเตผเดฃเตเดฃเดพเดฏเด" เด เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ เดเดพเดฃเดฟเดเตเดเตเด.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> Seq Scan | Bitmap Heap Scan | Index [Only] Scan [Backward]
&& 5 ร rows < RRbF -- ะพััะธะปัััะพะฒะฐะฝะพ >80% ะฟัะพัะธัะฐะฝะฝะพะณะพ
&& loops ร RRbF > 100 -- ะธ ะฟัะธ ััะพะผ ะฑะพะปััะต 100 ะทะฐะฟะธัะตะน ััะผะผะฐัะฝะพ
เดถเตเดชเดพเตผเดถเดเตพ
เดชเตเดฐเดคเตเดฏเตเดเด [เดเตเดเตเดคเตฝ] เดธเตเดทเตเดเดฟเดเตเดเตเด WHERE เด เดตเดธเตเดฅเดฏเตเดณเตเดณ เดธเตเดเดฟเด เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดธเตเดเดฟเดเดฏเดฟเตฝ เด เดงเดฟเด เดซเตเตฝเดกเตเดเตพ เดเตพเดชเตเดชเตเดเตเดคเตเดคเตเด.
เดจเดฟเดเตเดเดณเตเดเต เดเดตเดถเตเดฏเดเตเดเตพเดเตเดเต เดซเดฟเตฝเดเตเดเตผ เด เดตเดธเตเดฅ "เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเดเต" เดเดฃเตเดเตเดเดฟเตฝ - เด เดคเดพเดฏเดคเต เดตเดฟเดชเตเดฒเตเดเดฐเดฃเดคเตเดคเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ เดญเดพเดตเดฟเดฏเดฟเดฒเต เดฎเตเดฒเตเดฏเดเตเดเดณเตเดเต เดชเดเตเดเดฟเด - WHERE เดธเตเดเดฟเด เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต. เดตเดฟเดตเดฟเดง เดฌเตเดณเดฟเดฏเตป/เดเดจเด เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดธเตเดเตพ เด เดตเดฟเดญเดพเดเดคเตเดคเดฟเดฒเตเดเตเดเต เดจเดจเตเดจเดพเดฏเดฟ เดฏเตเดเดฟเดเตเดเตเดจเตเดจเต.
เดซเดฟเตฝเดเตเดเดฑเดฟเดเดเต เด เดตเดธเตเดฅเดฏเดพเดฃเตเดเตเดเดฟเตฝ เดตเตเดฏเดคเตเดฏเดธเตเดค เด เตผเดคเตเดฅเดเตเดเตพ เดเดเตเดเตเดเดพเด, เด เดชเตเดชเตเตพ เด เดซเตเตฝเดกเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดธเตเดเดฟเด เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต - BitmapAnd เดเด เดฎเตเดเดณเดฟเดฒเตเดณเตเดณ เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเดฒเตเดจเตเดจเดชเตเดฒเต.
เดเดฆเดพเดนเดฐเดฃเด:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, CASE
WHEN random() < 1::real/16 THEN NULL
ELSE (random() * 100)::integer -- 100 ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
END fk_own
, (random() < 1::real/50) critical; -- 1:50, ััะพ ะทะฐัะฒะบะฐ "ะบัะธัะธัะฝะฐั"
CREATE INDEX ON tbl(pk);
CREATE INDEX ON tbl(fk_own, pk);
SELECT
*
FROM
tbl
WHERE
critical
ORDER BY
pk
LIMIT 20;
เดคเดฟเดฐเตเดคเตเดคเตเดจเตเดจเต:
CREATE INDEX ON tbl(pk)
WHERE critical; -- ะดะพะฑะฐะฒะธะปะธ "ััะฐัะธัะฝะพะต" ััะปะพะฒะธะต ัะธะปัััะฐัะธะธ
เดจเดฟเดเตเดเตพเดเตเดเต เดเดพเดฃเดพเดจเดพเดเตเดจเตเดจเดคเตเดชเตเดฒเต, เดชเตเดฒเดพเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดซเดฟเตฝเดเตเดเดฑเดฟเดเดเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เด เดชเตเดฐเดคเตเดฏเดเตเดทเดฎเดพเดฏเดฟ, เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดพเดฏเดฟ 5 เดฎเดเดเตเดเต เดตเตเดเดคเตเดคเดฟเตฝ.
#5: เดตเดฟเดฐเดณเดฎเดพเดฏ เดชเดเตเดเดฟเด
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
เดจเดฟเดเตเดเดณเตเดเต เดธเตเดตเดจเตเดคเด เดเดพเดธเตโเดเต เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเต เดเตเดฏเต เดธเตเดทเตโเดเดฟเดเตเดเดพเดจเตเดณเตเดณ เดตเดฟเดตเดฟเดง เดถเตเดฐเดฎเดเตเดเตพ, เดเตเดฌเดฟเดณเดฟเดฒเต เดฑเตเดเตเดเตเตผเดกเตเดเดณเตเดเต เดเดฐเต เดตเดฒเดฟเดฏ เดธเดเดเตเดฏ เด เดชเตโเดกเตเดฑเตเดฑเตเดเตพ / เดเดฒเตเดฒเดพเดคเดพเดเตเดเดฒเตเดเตพ เดเดฐเต เดตเดฒเดฟเดฏ เดธเดเดเตเดฏ "เดกเตเดกเต" เดฑเตเดเตเดเตเตผเดกเตเดเดณเตเดเต เด เดตเดธเตเดฅเดฏเดฟเดฒเตเดเตเดเต เดจเดฏเดฟเดเตเดเตเดฎเตเดชเตเตพ.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> Seq Scan | Bitmap Heap Scan | Index [Only] Scan [Backward]
&& loops ร (rows + RRbF) < (shared hit + shared read) ร 8
-- ะฟัะพัะธัะฐะฝะพ ะฑะพะปััะต 1KB ะฝะฐ ะบะฐะถะดัั ะทะฐะฟะธัั
&& shared hit + shared read > 64
เดถเตเดชเดพเตผเดถเดเตพ
เดชเดคเดฟเดตเดพเดฏเดฟ เดธเตเดตเดฎเตเดงเดฏเดพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเด เดตเดพเดเตเดตเด [เดชเตเตผเดฃเตเดฃเด] เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ เดฎเดคเดฟเดฏเดพเดฏ เดเดเดฏเตเดเตเดเดฟเดเตเดฏเตเดณเตเดณ เดชเดฐเดฟเดถเตเดฒเดจเด เดจเตเดเตเด
เดฎเดฟเดเตเด เดเตเดธเตเดเดณเดฟเดฒเตเด, เดเตผเดเตเด เดเตเดฏเตเดคเดคเตเดชเตเดฒเตเดณเตเดณ เดฌเดฟเดธเดฟเดจเดธเตเดธเต เดฒเตเดเดฟเดเตเดเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเตเดฎเตเดชเตเตพ เดฎเตเดถเด เดเตเดฆเตเดฏ เดเตเดฎเตเดชเตเดธเดฟเดทเตป เดฎเตเดฒเดฎเดพเดฃเต เดเดคเตเดคเดฐเด เดชเตเดฐเดถเตเดจเดเตเดเตพ เดเดฃเตเดเดพเดเตเดจเตเดจเดคเต
PostgreSQL เดเดจเตเดฑเดฟเดชเดพเดฑเตเดฑเตเดฃเตเดเตพ: "เดฎเดฐเดฟเดเตเดเดตเดฐเตเดเต" เดเตเดเตเดเดคเตเดคเดฟเดจเตเดคเดฟเดฐเดพเดฏ เดชเตเดฐเดพเดเตเดเด .เดเดจเตเดจเดพเตฝ VACUUM FULL เดชเตเดฒเตเด เดเดฒเตเดฒเดพเดฏเตเดชเตเดชเตเดดเตเด เดธเดนเดพเดฏเดฟเดเตเดเตเดเตเดเดฟเดฒเตเดฒ เดเดจเตเดจเต เดจเดฟเดเตเดเตพ เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต. เด เดคเตเดคเดฐเด เดธเดจเตเดฆเตผเดญเดเตเดเดณเดฟเตฝ, เดฒเตเดเดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด เตฝเดเตเดฐเดฟเดคเด เดธเตเดตเดฏเด เดชเดฐเดฟเดเดฏเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเดคเต เดฎเตเดฒเตเดฏเดตเดคเตเดคเดพเดฃเต
DBA: เดตเดพเดเตเดตเด เดชเดฐเดพเดเดฏเดชเตเดชเตเดเตเดฎเตเดชเตเตพ, เดเดเตเดเตพ เดฎเตเดถ เดธเตเดตเดฎเตเดงเดฏเดพ เดตเตเดคเตเดคเดฟเดฏเดพเดเตเดเตเดจเตเดจเต .
#6: เดธเตเดเดฟเดเดฏเตเดเต "เดฎเดงเตเดฏเดคเตเดคเดฟเตฝ" เดจเดฟเดจเตเดจเต เดตเดพเดฏเดจ
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
เดเดเตเดเตพ เดเตเดฑเดเตเดเต เดตเดพเดฏเดฟเดเตเดเดคเดพเดฏเดฟ เดคเตเดจเตเดจเตเดจเตเดจเต, เดเดฒเตเดฒเดพเด เดธเตเดเดฟเดเดฏเดฟเดฒเดพเดเตเดเดฟ, เดเดเตเดเตพ เดเดฐเตเดฏเตเด เด เดงเดฟเดเดฎเดพเดฏเดฟ เดซเดฟเตฝเดเตเดเตผ เดเตเดฏเตเดคเดฟเดเตเดเดฟเดฒเตเดฒ - เดเดจเตเดจเดฟเดเตเดเตเด เดเดเตเดเตพ เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเด เดเตเดเตเดคเตฝ เดชเตเดเตเดเตพ เดเดเตเดเตพ เดตเดพเดฏเดฟเดเตเดเตเดจเตเดจเต.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> Index [Only] Scan [Backward]
&& loops ร (rows + RRbF) < (shared hit + shared read) ร 8
-- ะฟัะพัะธัะฐะฝะพ ะฑะพะปััะต 1KB ะฝะฐ ะบะฐะถะดัั ะทะฐะฟะธัั
&& shared hit + shared read > 64
เดถเตเดชเดพเตผเดถเดเตพ
เดเดชเดฏเตเดเดฟเดเตเด เดธเตเดเดฟเดเดฏเตเดเต เดเดเดจเดฏเตเด เด
เดจเตเดตเตเดทเดฃเดคเตเดคเดฟเตฝ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดฟเดฏ เดชเตเดฐเดงเดพเดจ เดซเตเตฝเดกเตเดเดณเตเด เดธเตเดเตเดทเตเดฎเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเด - เดฎเดฟเดเตเดเดตเดพเดฑเตเด เดธเตเดเดฟเดเดฏเตเดเต เดญเดพเดเด เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเดฟเดฏเดฟเดเตเดเดฟเดฒเตเดฒ. เดฎเดฟเดเตเดเดตเดพเดฑเตเด เดจเดฟเดเตเดเตพ เดธเดฎเดพเดจเดฎเดพเดฏ เดเดฐเต เดธเตเดเดฟเด เดธเตเดทเตเดเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต, เดชเดเตเดทเต เดชเตเดฐเดฟเดซเดฟเดเตเดธเต เดซเตเตฝเดกเตเดเตพ เดเดฒเตเดฒเดพเดคเต เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ
เดเดฆเดพเดนเดฐเดฃเด:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, (random() * 100)::integer fk_org -- 100 ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
, (random() * 1000)::integer fk_cli; -- 1K ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
CREATE INDEX ON tbl(fk_org, fk_cli); -- ะฒัะต ะฟะพััะธ ะบะฐะบ ะฒ #2
-- ัะพะปัะบะพ ะฒะพั ะพัะดะตะปัะฝัะน ะธะฝะดะตะบั ะฟะพ fk_cli ะผั ัะถะต ะฟะพััะธัะฐะปะธ ะปะธัะฝะธะผ ะธ ัะดะฐะปะธะปะธ
SELECT
*
FROM
tbl
WHERE
fk_cli = 999 -- ะฐ fk_org ะฝะต ะทะฐะดะฐะฝะพ, ั
ะพัั ััะพะธั ะฒ ะธะฝะดะตะบัะต ัะฐะฝััะต
LIMIT 20;
เดธเตเดเดฟเด เด
เดจเตเดธเดฐเดฟเดเตเดเต เดชเตเดฒเตเด เดเดฒเตเดฒเดพเด เดถเดฐเดฟเดฏเดพเดฃเตเดจเตเดจเต เดคเตเดจเตเดจเตเดจเตเดจเต, เดชเดเตเดทเต เดเดคเต เดเดเตเดเดจเตเดฏเตเดเตเดเดฟเดฒเตเด เดธเดเดถเดฏเดพเดธเตเดชเดฆเดฎเดพเดฃเต - เดตเดพเดฏเดฟเดเตเดเตเดจเตเดจ 20 เดฑเตเดเตเดเตเตผเดกเตเดเดณเดฟเตฝ เดเดฐเตเดจเตเดจเดฟเดจเตเด เดเดเตเดเตพเดเตเดเต 4 เดชเตเดเต เดกเดพเดฑเตเดฑ เดเตเดฑเดฏเตเดเตเดเตเดฃเตเดเดฟ เดตเดจเตเดจเต, เดเดฐเต เดฑเตเดเตเดเตเตผเดกเดฟเดจเต 32 เดเตเดฌเดฟ - เด
เดคเต เดงเตเดฐเตเดฏเดฎเดฒเตเดฒเต? เดเดชเตเดชเด เดธเตเดเดฟเด เดจเดพเดฎเดตเตเด tbl_fk_org_fk_cli_idx
เดเดฟเดจเตเดคเตเดพเดฆเตเดฆเตเดชเดเดฎเดพเดฏ.
เดคเดฟเดฐเตเดคเตเดคเตเดจเตเดจเต:
CREATE INDEX ON tbl(fk_cli);
เดชเตเดเตเดเตเดจเตเดจเต - 10 เดฎเดเดเตเดเต เดตเตเดเดคเตเดคเดฟเตฝ, เดตเดพเดฏเดฟเดเตเดเดพเตป 4 เดฎเดเดเตเดเต เดเตเดฑเดตเต!
เดธเตเดเดฟเดเดเดณเตเดเต เดซเดฒเดชเตเดฐเดฆเดฎเดฒเตเดฒเดพเดคเตเดค เดเดชเดฏเตเดเดคเตเดคเดฟเดจเตเดฑเต เดธเดพเดนเดเดฐเตเดฏเดเตเดเดณเตเดเต เดฎเดฑเตเดฑเต เดเดฆเดพเดนเดฐเดฃเดเตเดเตพ เดฒเตเดเดจเดคเตเดคเดฟเตฝ เดเดพเดฃเดพเด
DBA: เดเดชเดฏเตเดเดถเตเดจเตเดฏเดฎเดพเดฏ เดธเตเดเดฟเดเดเตพ เดเดฃเตเดเตเดคเตเดคเตเดจเตเดจเต .
#7: CTE ร CTE
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
เด
เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ "เดเตเดดเตเดชเตเดชเต" CTE เดธเตเดเตเตผ เดเตเดฏเตเดคเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดเตเดเดฟเดเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต, เดคเตเดเตผเดจเตเดจเต เด
เดตเดฏเตเดเตเดเดฟเดเดฏเดฟเตฝ เด
เดคเต เดเตเดฏเตเดฏเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต JOIN
.
เดเตเดธเต v12-เดจเต เดคเดพเดดเตเดฏเตเดณเตเดณ เดชเดคเดฟเดชเตเดชเตเดเตพเดเตเดเต โโเด
เดญเตเดฏเตผเดคเตเดฅเดจเดเตพเดเตเดเต โโเดชเตเดฐเดธเดเตเดคเดฎเดพเดฃเต WITH MATERIALIZED
.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> CTE Scan
&& loops > 10
&& loops ร (rows + RRbF) > 10000
-- ัะปะธัะบะพะผ ะฑะพะปััะพะต ะดะตะบะฐััะพะฒะพ ะฟัะพะธะทะฒะตะดะตะฝะธะต CTE
เดถเตเดชเดพเตผเดถเดเตพ
เด
เดญเตเดฏเตผเดคเตเดฅเดจ เดถเตเดฐเดฆเตเดงเดพเดชเตเตผเดตเตเดตเด เดตเดฟเดถเดเดฒเดจเด เดเตเดฏเตเดฏเตเด - เดเดชเตเดชเด
#8: เดกเดฟเดธเตเดเดฟเดฒเตเดเตเดเต เดธเตเดตเดพเดชเตเดชเต เดเตเดฏเตเดฏเตเด (เดเตเดเดชเต เดเดดเตเดคเดฟเดฏเดคเต)
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
เดงเดพเดฐเดพเดณเด เดฑเตเดเตเดเตเตผเดกเตเดเดณเตเดเต เดเดฑเตเดฑเดคเตเดคเดตเดฃ เดชเตเดฐเตเดธเดธเตเดธเดฟเดเดเต (เดธเตเตผเดเตเดเดฟเดเดเต เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เด เดฆเตเดตเดฟเดคเตเดฏเดฎเดพเดเตเดเตฝ) เดเดคเดฟเดจเดพเดฏเดฟ เดจเตเดเตเดเดฟเดตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดฎเตเดฎเตเดฎเดฑเดฟเดฏเตเดฎเดพเดฏเดฟ เดชเตเดฐเตเดคเตเดคเดชเตเดชเตเดเตเดจเตเดจเดฟเดฒเตเดฒ.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> *
&& temp written > 0
เดถเตเดชเดพเตผเดถเดเตพ
เดเดชเตเดชเดฑเตเดทเตป เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจ เดฎเตเดฎเตเดฎเดฑเดฟเดฏเตเดเต เด
เดณเดตเต เดชเดฐเดพเดฎเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดฎเตเดฒเตเดฏเดคเตเดคเต เดเดตเดฟเดฏเตเดจเตเดจเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ SET [LOCAL]
เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เด
เดญเตเดฏเตผเดคเตเดฅเดจ/เดเดเดชเดพเดเดฟเดจเต.
เดเดฆเดพเดนเดฐเดฃเด:
SHOW work_mem;
-- "16MB"
SELECT
random()
FROM
generate_series(1, 1000000)
ORDER BY
1;
เดคเดฟเดฐเตเดคเตเดคเตเดจเตเดจเต:
SET work_mem = '128MB'; -- ะฟะตัะตะด ะฒัะฟะพะปะฝะตะฝะธะตะผ ะทะฐะฟัะพัะฐ
เดตเตเดฏเดเตเดคเดฎเดพเดฏ เดเดพเดฐเดฃเดเตเดเดณเดพเตฝ, เดกเดฟเดธเตเดเดฒเตเดฒ เดฎเตเดฎเตเดฎเดฑเดฟ เดฎเดพเดคเตเดฐเดฎเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเตเดณเตเดณเต เดเดเตเดเดฟเตฝ, เดเตเดฆเตเดฏเด เดตเดณเดฐเต เดตเตเดเดคเตเดคเดฟเตฝ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเด. เด เดคเต เดธเดฎเดฏเด, เดเดเตเดเตเดกเดฟเดกเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฒเตเดกเดฟเดจเตเดฑเต เดเดฐเต เดญเดพเดเดตเตเด เดจเตเดเตเดเดเดเตเดฏเตเดฏเตเดจเตเดจเต.
เดเดจเตเดจเดพเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดเดฒเตเดฒเดพเดฏเตเดชเตเดชเตเดดเตเด เดงเดพเดฐเดพเดณเด เดฎเตเดฎเตเดฎเดฑเดฟ เด เดจเตเดตเดฆเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒเตเดจเตเดจเต เดจเดฟเดเตเดเตพ เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต - เดเดฒเตเดฒเดพเดตเตผเดเตเดเตเด เดฎเดคเดฟเดฏเดพเดเดฟเดฒเตเดฒ.
#9: เด เดชเตเดฐเดธเดเตเดคเดฎเดพเดฏ เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเดเตเดเดฃเดเตเดเตเดเตพ
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
เด
เดตเตผ เดเดฐเตเดธเดฎเดฏเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเตเดเตเดเต เดงเดพเดฐเดพเดณเด เดชเดเตผเดจเตเดจเต, เดชเดเตเดทเต เด
เดคเต เดเดเดฟเดเตเดเดพเตป เดธเดฎเดฏเดฎเดฟเดฒเตเดฒ ANALYZE
.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> Seq Scan | Bitmap Heap Scan | Index [Only] Scan [Backward]
&& ratio >> 10
เดถเตเดชเดพเตผเดถเดเตพ
เด
เดคเต เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเด ANALYZE
.
เด เดธเดพเดนเดเดฐเตเดฏเด เดเตเดเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต
PostgreSQL เดเดจเตเดฑเดฟเดชเดพเดฑเตเดฑเตเดฃเตเดเตพ: เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเดเตเดเดฃเดเตเดเตเดเดณเดพเดฃเต เดเดฒเตเดฒเดพเด .
#10: "เดเดจเตเดคเต เดเตเดดเดชเตเดชเด เดธเดเดญเดตเดฟเดเตเดเต"
เดเดชเตเดชเตเตพ เดเตเดฏเตเดฏเตเดจเตเดจเต
เดเดฐเต เดฎเดคเตเดธเดฐเดพเดงเดฟเดทเตเด เดฟเดค เด เดญเตเดฏเตผเดคเตเดฅเดจ เดเตเดฎเดคเตเดคเดฟเดฏ เดฒเตเดเตเดเดฟเดจเดพเดฏเดฟ เดเดฐเต เดเดพเดคเตเดคเดฟเดฐเดฟเดชเตเดชเตเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดฎเดคเดฟเดฏเดพเดฏ CPU/เดนเตเดชเตเดชเตผเดตเตเดธเตผ เดนเดพเตผเดกเตโเดตเตเดฏเตผ เดเดฑเดตเดฟเดเดเตเดเตพ เดเดฒเตเดฒเดพเดฏเดฟเดฐเตเดจเตเดจเต.
เดเดเตเดเดจเต เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเดพเด
-> *
&& (shared hit / 8K) + (shared read / 1K) < time / 1000
-- RAM hit = 64MB/s, HDD read = 8MB/s
&& time > 100ms -- ัะธัะฐะปะธ ะผะฐะปะพ, ะฝะพ ัะปะธัะบะพะผ ะดะพะปะณะพ
เดถเตเดชเดพเตผเดถเดเตพ
เดฌเดพเดนเตเดฏเดฎเดพเดฏเดฟ เดเดชเดฏเตเดเดฟเดเตเดเตเด เดจเดฟเดฐเตเดเตเดทเดฃ เดธเดเดตเดฟเดงเดพเดจเด เดคเดเดฏเตเดจเตเดจเดคเดฟเดจเต เด
เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฏ เดตเดฟเดญเดต เดเดชเดญเตเดเดคเตเดคเดฟเดจเต เดเดณเตเดณ เดธเตเตผเดตเตผ. เดจเตเดฑเตเดเดฃเดเตเดเดฟเดจเต เดธเตเตผเดตเดฑเตเดเตพเดเตเดเดพเดฏเดฟ เด เดชเตเดฐเดเตเดฐเดฟเดฏ เดธเดเดเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดเตเดเดณเตเดเต เดชเดคเดฟเดชเตเดชเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดเตเดเตพ เดเดคเดฟเดจเดเด เดธเดเดธเดพเดฐเดฟเดเตเดเต
เด
เดตเดฒเดเดฌเด: www.habr.com