เจฎเจนเฉเจจเฉ เจชเจนเจฟเจฒเจพเจ
เจคเฉเจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจธเจฆเฉ เจตเจฐเจคเฉเจ 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: เจเฉฐเจกเฉเจเจธ เจเฉฐเจเจฐเจธเฉเจเจธเจผเจจ (เจฌเจฟเจเจฎเฉเจช เจ เจคเฉ)
เจเจฆเฉเจ เจเจฐเจฆเจพ เจนเฉ
เจเจฒเจพเจเฉฐเจ "LLC เจเฉเจฒเฉเจเฉเจฒเจเจฟเจ" เจฒเจ เจธเจพเจฐเฉ เจธเจฎเจเฉเจคเฉ เจฆเจฟเจเจพเจ, "NAO เจฌเจเจฐเจเฉฑเจช" เจฆเฉ เจคเจฐเจซเฉเจ เจธเจฎเจพเจชเจค เจนเฉเจเฅค
เจชเจเจพเจฃ เจเจฟเจตเฉเจ เจเจฐเฉเจ
-> 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: เจธเฉเจเจเจพเจเจ เจจเฉเฉฐ เจฎเจฟเจฒเจพเจ (เจฌเจฟเจเจฎเฉเจชเจเจฐ)
เจเจฆเฉเจ เจเจฐเจฆเจพ เจนเฉ
เจคเฉเจนเจพเจกเฉเจเจ เจชเจนเจฟเจฒ เจฆเฉ เจจเจพเจฒ, เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฒเจ เจชเจนเจฟเจฒเฉเจเจ 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 เจเจเจเฉเจชเฉเจเจฐเจจ: เจนเจพเจจเฉเจเจพเจฐเจ JOINs เจ เจคเฉ ORs ะธPostgreSQL เจเจเจเฉเจชเฉเจเจฐเจจเจเจผ: เจจเจพเจฎ เจฆเฉเจเจฐเจพ เจเฉเจ เจฆเฉ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ เจเจนเจพเจฃเฉ, เจเจพเจ "เจ เฉฑเจเฉ เจ เจคเฉ เจ เฉฑเจเฉ เจ เจจเฉเจเฉเจฒเจคเจพ" .เจเจฎ เจธเฉฐเจธเจเจฐเจฃ เจเจ เจเฉเฉฐเจเฉเจเจ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ เจเจฐเจกเจฐ เจเฉเจคเฉ เจเฉเจฃ (เจ เจคเฉ เจจเจพ เจธเจฟเจฐเจซเจผ const/NULL เจเฉเฉเจพ) เจฒเฉเจ เจตเจฟเฉฑเจ เจเจฐเจเจพ เจเฉเจคเฉ เจเจ เจนเฉ
SQL HowTo: เจชเฉเฉฑเจ-เจเจฟเฉฑเจ เจตเจฟเฉฑเจ เจธเจฟเฉฑเจงเจพ เจเฉเจ เจธเจฎเจพเจ เจฒเฉเจช เจฒเจฟเจเจฃเจพ, เจเจพเจ โเจเจฒเฉเจฎเฉเจเจเจฐเฉ เจคเจฟเฉฐเจจ-เจชเฉเจพเจ โ .
#4: เจ เจธเฉเจ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจฌเฉเจฒเฉเฉเฉเจเจ เจเฉเจเจผเจพเจ เจชเฉเฉเจนเจฆเฉ เจนเจพเจ
เจเจฆเฉเจ เจเจฐเจฆเจพ เจนเฉ
เจเฉฑเจ เจจเจฟเจฏเจฎ เจฆเฉ เจคเฉเจฐ 'เจคเฉ, เจเจน เจเจฆเฉเจ เจชเฉเจฆเจพ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเจฆเฉเจ เจคเฉเจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจฎเฉเจเฉเจฆ เจฌเฉเจจเจคเฉ เจจเจพเจฒ "เจเฉฑเจ เจนเฉเจฐ เจซเจฟเจฒเจเจฐ เจเฉเฉเจจเจพ" เจเจพเจนเฉเฉฐเจฆเฉ เจนเฉเฅค
โเจ เจคเฉ เจคเฉเจนเจพเจกเฉ เจเฉเจฒ เจเจนเฉ เจจเจนเฉเจ เจนเฉ, เจชเจฐ เจฎเฉเจคเฉ เจฆเฉ เจฎเจพเจ เจฆเฉ เจฌเจเจจเจพเจ เจจเจพเจฒ? " เจซเจฟเจฒเจฎ "เจฆ เจกเจพเจเจฎเฉฐเจก เจเจฐเจฎ"
เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเจชเจฐเฉเจเจค เจเฉฐเจฎ เจจเฉเฉฐ เจธเฉเจงเจฃเจพ, เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฒเจ เจชเจนเจฟเจฒเฉเจเจ 20 เจธเจญ เจคเฉเจ เจชเฉเจฐเจพเจฃเฉเจเจ "เจจเจพเจเจผเฉเจ" เจฌเฉเจจเจคเฉเจเจ เจฆเจฟเจเจพเจ, เจเจนเจจเจพเจ เจฆเฉ เจเจฆเฉเจธเจผ เจฆเฉ เจชเจฐเจตเจพเจน เจเฉเจคเฉ เจฌเจฟเจจเจพเจเฅค
เจชเจเจพเจฃ เจเจฟเจตเฉเจ เจเจฐเฉเจ
-> Seq Scan | Bitmap Heap Scan | Index [Only] Scan [Backward]
&& 5 ร rows < RRbF -- ะพััะธะปัััะพะฒะฐะฝะพ >80% ะฟัะพัะธัะฐะฝะฝะพะณะพ
&& loops ร RRbF > 100 -- ะธ ะฟัะธ ััะพะผ ะฑะพะปััะต 100 ะทะฐะฟะธัะตะน ััะผะผะฐัะฝะพ
เจฟเจธเจซเจผเจพเจฐ
[เจนเฉเจฐ] เจตเจฟเจธเจผเฉเจธเจผ เจฌเจฃเจพเจ WHERE เจธเจผเจฐเจค เจฆเฉ เจจเจพเจฒ เจธเฉเจเจเจพเจเจ เจเจพเจ เจธเฉเจเจเจพเจเจ เจตเจฟเฉฑเจ เจตเจพเจงเฉ เจเฉเจคเจฐ เจธเจผเจพเจฎเจฒ เจเจฐเฉเฅค
เจเฉ เจซเจฟเจฒเจเจฐ เจธเจฅเจฟเจคเฉ เจคเฉเจนเจพเจกเฉ เจเจฆเฉเจธเจผเจพเจ เจฒเจ "เจธเจฅเจฟเจฐ" เจนเฉ - เจเจน เจนเฉ เจตเจฟเจธเจฅเจพเจฐ เจฆเจพ เจฎเจคเจฒเจฌ เจจเจนเฉเจ เจนเฉ เจญเจตเจฟเฉฑเจ เจตเจฟเฉฑเจ เจฎเฉเฉฑเจฒเจพเจ เจฆเฉ เจธเฉเจเฉ - WHERE เจธเฉเจเจเจพเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉเฅค เจตเฉฑเจ-เจตเฉฑเจ เจฌเฉเจฒเฉเจ เจจ/เจเจจเจฎ เจธเจฅเจฟเจคเฉเจเจ เจเจธ เจธเจผเฉเจฐเฉเจฃเฉ เจตเจฟเฉฑเจ เจเฉฐเจเฉ เจคเจฐเฉเจนเจพเจ เจซเจฟเฉฑเจ เจนเฉเฉฐเจฆเฉเจเจ เจนเจจเฅค
เจเฉ เจซเจฟเจฒเจเจฐเจฟเฉฐเจ เจธเจฅเจฟเจคเฉ เจตเฉฑเจ-เจตเฉฑเจ เจ เจฐเจฅ เจฒเฉ เจธเจเจฆเฉ เจนเจจ, เจซเจฟเจฐ เจเจนเจจเจพเจ เจเฉเจคเจฐเจพเจ เจฆเฉ เจจเจพเจฒ เจธเฉเจเจเจพเจเจ เจฆเจพ เจตเจฟเจธเจคเจพเจฐ เจเจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉ - เจเจฟเจตเฉเจ เจเจฟ เจฌเจฟเจเจฎเฉเจช เจ เจคเฉ เจเฉฑเจชเจฐ เจฆเฉ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจนเฉเฅค
เจเจฆเจพเจนเจฐเจจ:
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 เจเจเจเฉเจชเฉเจเจฐเจจ: "เจฎเจฐเฉ" เจฆเฉ เจญเฉเฉ เจจเจพเจฒ เจฒเฉเจจเจพ .เจชเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจเจน เจธเจฎเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฟ เจตเฉเจเจฟเจเจฎ เจซเฉเจฒ เจตเฉ เจนเจฎเฉเจธเจผเจพ เจฎเจฆเจฆ เจจเจนเฉเจ เจเจฐ เจธเจเจฆเจพเฅค เจ เจเจฟเจนเฉ เจฎเจพเจฎเจฒเจฟเจเจ เจฒเจ, เจฒเฉเจ เจคเฉเจ เจเจฒเจเฉเจฐเจฟเจฆเจฎ เจจเจพเจฒ เจเจชเจฃเฉ เจเจช เจจเฉเฉฐ เจเจพเจฃเฉ เจเจฐเจตเจพเจเจฃเจพ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจฃ เจนเฉ
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 เจชเฉฐเจจเจฟเจเจ เจฆเฉ เจกเฉเจเจพ, 32KB เจชเฉเจฐเจคเฉ เจฐเจฟเจเจพเจฐเจก เจเจเจพเจเจฃเจพ เจชเจฟเจ - เจเฉ เจเจน เจฌเฉเจฒเจก เจจเจนเฉเจ เจนเฉ? เจ
เจคเฉ เจธเฉเจเจเจพเจเจ เจฆเจพ เจจเจพเจฎ 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'; -- ะฟะตัะตะด ะฒัะฟะพะปะฝะตะฝะธะตะผ ะทะฐะฟัะพัะฐ
เจธเจชเฉฑเจธเจผเจ เจเจพเจฐเจจเจพเจ เจเจฐเจเฉ, เจเฉเจเจฐ เจธเจฟเจฐเจซเจผ เจฎเฉเจฎเฉเจฐเฉ เจตเจฐเจคเฉ เจเจพเจเจฆเฉ เจนเฉ เจ เจคเฉ เจกเจฟเจธเจ เจจเจนเฉเจ, เจคเจพเจ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฌเจนเฉเจค เจคเฉเจเจผเฉ เจจเจพเจฒ เจเจฒเจพเจ เจเจพเจตเฉเจเฉเฅค เจเจธเฉ เจธเจฎเฉเจ, HDD เจคเฉเจ เจฒเฉเจก เจฆเจพ เจนเจฟเฉฑเจธเจพ เจตเฉ เจนเจเจพ เจฆเจฟเฉฑเจคเจพ เจเจพเจเจฆเจพ เจนเฉ.
เจชเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจเจน เจธเจฎเจเจฃ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ เจเจฟ เจคเฉเจธเฉเจ เจนเจฎเฉเจธเจผเจพเจ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจ เจคเฉ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจฎเฉเจฎเฉเจฐเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจจเจนเฉเจ เจนเฉเจตเฉเจเฉ - เจเฉฑเจฅเฉ เจนเจฐ เจเจฟเจธเฉ เจฒเจ เจเจพเจซเจผเฉ เจจเจนเฉเจ เจนเฉเจตเฉเจเจพเฅค
#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