以åã®èšäºã§ã¯
ãPostgreSQLã®ã€ã³ããã¯ã¹äœæã¡ã«ããºã ã
ã¢ã¯ã»ã¹ã¡ãœããã€ã³ã¿ãŒãã§ã€ã¹ãããã³
ããã·ã¥ã€ã³ããã¯ã¹ ã
BããªãŒ ã
GiST ã
SP-GiST ã
GINã RUMã®åã¡ãœããã«ã€ããŠèŠãŠããŸã
ã ã ãã®èšäºã®ãããã¯ã¯ãBRINã€ã³ããã¯ã¹ã§ãã
ããªã³
äžè¬çãªèãæ¹
ãã§ã«äŒã£ãã€ã³ããã¯ã¹ãšã¯ç°ãªããBRINã®ã¢ã€ãã¢ã¯ãå¿
èŠãªè¡ããã°ããèŠã€ããããšã§ã¯ãªããæããã«äžèŠãªè¡ãèŠãããšãé¿ããããšã§ãã ããã¯åžžã«
äžæ£ç¢ºãªã€ã³ããã¯ã¹ã§ããããŒãã«æååã®TIDã¯ãŸã£ããå«ãŸããŠããŸããã
ç°¡åã«èšãã°ãBRINã¯ãå€ãããŒãã«å
ã®ç©ççãªå Žæãšçžé¢ããåã«å¯ŸããŠé©åã«æ©èœããŸãã ã€ãŸããORDER BYå¥ã®ãªãã¯ãšãªãåã®å€ãã»ãŒæé ãŸãã¯éé ã§è¿ãå ŽåïŒããã³åã«ã€ã³ããã¯ã¹ãååšããªãå ŽåïŒã
ãã®ã¢ã¯ã»ã¹æ¹æ³ã¯ããŠãããã®ãµã€ãºãšæ°åãã©ãã€ãã®ããŒãã«ã«æ³šç®ããŠã
Axleã®è¶
倧èŠæš¡åæããŒã¿ããŒã¹ã«é¢ãã欧å·ãããžã§ã¯ãã®äžç°ãšããŠäœæãããŸããã ãã®ãããªããŒãã«ã«ã€ã³ããã¯ã¹ãäœæã§ããBRINã®éèŠãªããããã£ã¯ããµã€ãºãå°ãããã¡ã³ããã³ã¹ã®ãªãŒããŒããããæå°éã§ããããšã§ãã
次ã®ããã«æ©èœããŸãã ããŒãã«ã¯ãããã€ãã®ããŒãžïŒãŸãã¯ãããã¯ãåãïŒã®ãµã€ãºã®
ãŸãŒã³ ïŒç¯å²ïŒã«åå²ãã
ãŸãããã®ãããååã¯Block Range IndexãBRINã§ãã ã€ã³ããã¯ã¹ã®åãŸãŒã³ã«ã¯ããã®ãŸãŒã³ã®ããŒã¿
ã«é¢ããèŠçŽæ
å ±ãä¿åãããŸãã ååãšããŠãããã¯æå°å€ãšæ倧å€ã§ãããåŸã§èŠãããã«ãç°ãªãæ¹æ³ã§çºçããŸãã åã®æ¡ä»¶ãå«ãã¯ãšãªãå®è¡ãããšãã«ãç®çã®å€ãç¯å²å
ã«åãŸããªãå ŽåããŸãŒã³å
šäœãå®å
šã«ã¹ãããã§ããŸãã ãã®å ŽåããŸãŒã³ã®ãã¹ãŠã®ãããã¯å
ã®ãã¹ãŠã®è¡ãã¬ãã¥ãŒããŠéžæããå¿
èŠããããŸãã
BRINãéåžžã®æå³ã§ã®ã€ã³ããã¯ã¹ãšããŠã§ã¯ãªããã·ãŒã±ã³ã·ã£ã«ããŒãã«ã¹ãã£ã³ã®ã¢ã¯ã»ã©ã¬ãŒã¿ãšããŠèããããšã¯ééãã§ã¯ãããŸããã åãŸãŒã³ãåå¥ã®ãä»®æ³ãã»ã¯ã·ã§ã³ãšèŠãªãããå ŽåãããŒãã£ã·ã§ã³åã®ä»£æ¿ãšããŠèŠãããšãã§ããŸãã
次ã«ãã€ã³ããã¯ã¹ããã€ã¹ãããã«è©³ããèŠãŠã¿ãŸãããã
è£
眮
ã€ã³ããã¯ã¹ã®æåã®ïŒããæ£ç¢ºã«ã¯ãŒãïŒã¯ãã¡ã¿ããŒã¿ã®ããããŒãžã§ãã
ã¡ã¿ããŒã¿ããããçšåºŠã®ããŒãžã³ãããã®ã¯ãèŠçŽæ
å ±ã®ããããŒãžã§ãã åã€ã³ããã¯ã¹è¡ã«ã¯ãåäžã®ãŸãŒã³ã®æŠèŠãå«ãŸããŠããŸãã
ãŸããã¡ã¿ããŒãžãšæŠèŠããŒã¿ã®éã«ã¯ãéæ¹åç¯å²ãããïŒç¥ç§°revmapïŒãæã€ããŒãžããããŸãã æ¬è³ªçã«ãããã¯å¯Ÿå¿ããã€ã³ããã¯ã¹è¡ãžã®ãã€ã³ã¿ãŒïŒTIDïŒã®é
åã§ãã
äžéšã®ãŸãŒã³ã§ã¯ãrevmapã®ãã€ã³ã¿ãŒãã€ã³ããã¯ã¹è¡ã«ã€ãªãã£ãŠããªãå ŽåããããŸãïŒå³ã®ã°ã¬ãŒã§è¡šç€ºïŒã ãã®å Žåããã®ãŸãŒã³ã®çµ±åæ
å ±ã¯ãŸã ãªããšèŠãªãããŸãã
ã€ã³ããã¯ã¹ã¹ãã£ã³
ããŒãã«è¡ãžã®åç
§ãå«ãŸããŠããªãå Žåãã€ã³ããã¯ã¹ã¯ã©ã®ããã«äœ¿çšãããŸããïŒ ãã¡ããããã®ã¢ã¯ã»ã¹æ¹æ³ã¯æååã1ã€ãã€è¿ãããšã¯ã§ããŸãããããããããããäœæããããšã¯ã§ããŸãã ããããããããŒãžã«ã¯ãæ£ç¢º-è¡ã«å¯ŸããŠ-ããã³äžæ£ç¢º-ããŒãžã«å¯ŸããŠ2ã€ã®ã¿ã€ãããããŸãã 䜿çšãããã®ã¯äžæ£ç¢ºãªããããããã§ãã
ã¢ã«ãŽãªãºã ã¯ç°¡åã§ãã ãŸãŒã³ã®ãããã¯é 次ã¹ãã£ã³ãããŸãïŒã€ãŸãããŸãŒã³ã¯ããŒãã«å
ã®äœçœ®ã®é ã«ãœãŒããããŸãïŒã ãã€ã³ã¿ãŒã䜿çšããŠãåãŸãŒã³ã®ãµããªãŒæ
å ±ãå«ãã€ã³ããã¯ã¹è¡ãå®çŸ©ãããŸãã ãŸãŒã³ã«ç®çã®å€ãæ£ç¢ºã«å«ãŸããŠããªãå Žåãã¹ããããããŸãã å«ããããšãã§ããå ŽåïŒãŸãã¯èŠçŽæ
å ±ããªãå ŽåïŒ-ãŸãŒã³ã®ãã¹ãŠã®ããŒãžãããããããã«è¿œå ãããŸãã çµæã®ããããããã¯ãéåžžã©ããããã«äœ¿çšãããŸãã
ã€ã³ããã¯ã¹ã®æŽæ°
ããã«èå³æ·±ãã®ã¯ãããŒãã«ãå€æŽãããšãã«ã€ã³ããã¯ã¹ãæŽæ°ããç¶æ³ã§ãã
è¡ã®æ°ããããŒãžã§ã³ã衚圢åŒããŒãžã«
è¿œå ãããšã ããã®è¡ãå±ãããŸãŒã³ãç¹å®ãããŸãŒã³ãããã§ãµããªãŒæ
å ±ãå«ãã€ã³ããã¯ã¹è¡ãèŠã€ããŸãã ãããã¯ãã¹ãŠåçŽãªç®è¡æŒç®ã§ãã ããšãã°ããŸãŒã³ã®ãµã€ãºã4ããŒãžã§ã13ããŒãžã«å€ã42ãã®è¡ã®ããŒãžã§ã³ã衚瀺ããããšããŸãã ãŸãŒã³çªå·ïŒãŒãããå§ãŸãïŒã¯13/4 = 3ã§ããããã¯ãrevmapã§ãªãã»ããã3ïŒè¡ã®4çªç®ïŒã®ãã€ã³ã¿ãŒãåãããšãæå³ããŸãã
ãã®ãŸãŒã³ã®æå°å€ã¯31ãæ倧å€ã¯40ã§ããæ°ããå€42ã¯ãããã®å¶éãè¶
ããŠãããããæ倧å€ãæŽæ°ããŸãïŒå³ãåç
§ïŒã æ°ããå€ãæ¢åã®ãã¬ãŒã ã¯ãŒã¯ã«é©åããå Žåãã€ã³ããã¯ã¹ãæŽæ°ããå¿
èŠã¯ãããŸããã
ããã¯ãã¹ãŠããã§ã«èŠçŽæ
å ±ãååšãããŸãŒã³ã«æ°ããããŒãžã§ã³ã®ã©ã€ã³ã衚瀺ãããå Žåã«é¢ãããã®ã§ãã ã€ã³ããã¯ã¹ãäœæãããšãæ¢åã®ãã¹ãŠã®ãŸãŒã³ã®ãµããªãŒæ
å ±ãèšç®ãããŸãããããŒãã«ãããã«å€§ãããªããšããã®ç¯å²ãè¶
ããæ°ããããŒãžã衚瀺ãããå ŽåããããŸãã ããã§ã¯2ã€ã®ãªãã·ã§ã³ãå¯èœã§ãã
- éåžžãã€ã³ããã¯ã¹ã®å³ææŽæ°ã¯è¡ãããŸããã ããã«ã¯äœã®åé¡ããããŸããã åè¿°ããããã«ãã€ã³ããã¯ã¹ãã¹ãã£ã³ãããšããŸãŒã³å
šäœãã¹ãã£ã³ãããŸãã å®éãæŽæ°ã¯ã¯ãªãŒãã³ã°äžïŒããã¥ãŒã ïŒã«å®è¡ãããŸãããbrin_summarize_new_valuesé¢æ°ãåŒã³åºããŠæåã§å®è¡ããããšãã§ããŸãã
- autosummarizeãã©ã¡ãŒã¿ãŒã䜿çšããŠã€ã³ããã¯ã¹ãäœæãããšãæŽæ°ã¯ããã«è¡ãããŸãã ãã ãããŸãŒã³ããŒãžã«æ°ããå€ãå
¥åãããšãæŽæ°ãéåžžã«é »ç¹ã«å®è¡ãããå¯èœæ§ãããããããã®ãªãã·ã§ã³ã¯ããã©ã«ãã§ãªãã«ãªã£ãŠããŸãã
æ°ãããŸãŒã³ã衚瀺ããããšãrevmapãµã€ãºãå¢å ããå ŽåããããŸãã ãã®ã«ãŒããå²ãåœãŠãããããŒãžã«åãŸããªããªããšã次ã®ã«ãŒããããã£ããã£ããããããã«ãã£ãè¡ã®ãã¹ãŠã®ããŒãžã§ã³ãä»ã®ããŒãžã«ç§»åããŸãã ãããã£ãŠããŸãŒã³ãããã¯åžžã«ã¡ã¿ããŒãžãšèŠçŽããŒã¿ã®éã«é
眮ãããŸãã
è¡ã
åé€ãããšã ...äœãèµ·ãããŸããã å Žåã«ãã£ãŠã¯ãæå°å€ãŸãã¯æ倧å€ãåé€ãããç¯å²ãçž®å°ãããããšããããŸãã ãããããããå€æããã«ã¯ããŸãŒã³å
ã®ãã¹ãŠã®å€ãèªã¿åãå¿
èŠããããããã¯æ¡ç®ãåããŸããã
ã€ã³ããã¯ã¹ã®æ£ç¢ºãã¯ããã«åœ±é¿ãããŸããããæ€çŽ¢æã«ã¯ãå®éã«å¿
èŠãªæ°ãããå€ãã®ãŸãŒã³ã調ã¹ãå¿
èŠãããå ŽåããããŸãã ååãšããŠããã®ãããªãŸãŒã³ã§ã¯ããµããªãŒæ
å ±ãæåã§åæ§æã§ããŸãïŒbrin_desummarize_rangeããã³brin_summarize_new_valuesé¢æ°ãåŒã³åºããŸãïŒãããã®ãããªå¿
èŠæ§ãæ€åºããæ¹æ³ã¯ãããŸããïŒ ãããã«ããããã®ããã®éåžžã®æé ã¯æäŸãããŠããŸããã
ããŠã
è¡ãæŽæ°ãããšãå€ãããŒãžã§ã³ãåé€ãããæ°ããããŒãžã§ã³ãè¿œå ãããŸãã
äŸ
ãã¢ããŒã¿ããŒã¹ã®ããŒãã«ã«åºã¥ããŠããããŒã¿ãŠã§ã¢ããŠã¹ãæ§ç¯ããŠã¿ãŸãããã BIã¬ããŒãã®å¿
èŠæ§ã®ããã«ã空枯ããåºçºãããã©ã€ããŸãã¯ç©ºæž¯ã«çéžãããã©ã€ãããã£ãã³å
ã®å Žæã«æ£ç¢ºã«åæ ããéæ£èŠåããŒãã«ãå¿
èŠã ãšããŸãã å空枯ã®ããŒã¿ã¯ãé©åãªã¿ã€ã ãŸãŒã³ã®æ·±å€ã«å°çãããšããã«ã1æ¥ã«1åããŒãã«ã«è¿œå ãããŸãã ããŒã¿ã¯å€æŽãåé€ããããŸããã
ããŒãã«ã¯æ¬¡ã®ããã«ãªããŸãã
demo=# create table flights_bi(
airport_code char(3), --
airport_coord point, --
airport_utc_offset interval, --
flight_no char(6), --
flight_type text. -- : departure () / arrival ()
scheduled_time timestamptz, -- /
actual_time timestamptz, --
aircraft_code char(3), --
seat_no varchar(4), --
fare_conditions varchar(10), --
passenger_id varchar(20), --
passenger_name text --
);
CREATE TABLE
ããŒã¿ã®ããŒãæé ã¯ãã¹ãããããµã€ã¯ã«ã§ã·ãã¥ã¬ãŒãã§ããŸããæ¥åäœã®å€éšïŒ
倧èŠæš¡ããŒã¿ããŒã¹ã䜿çšããããã365æ¥ããããŸãïŒãå
éšã®ã¿ã€ã ãŸãŒã³ïŒUTC + 02ãUTC + 12ïŒã§ãã ãªã¯ãšã¹ãã¯éåžžã«é·ããããŸãé¢å¿ããªãããããã¿ãã¬ã®äžã«é ããŸãã
ã¹ãã¬ãŒãžãžã®ããŒã¿èªã¿èŸŒã¿ã®ã·ãã¥ã¬ãŒã·ã§ã³DO $$
<<local>>
DECLARE
curdate date := (SELECT min(scheduled_departure) FROM flights);
utc_offset interval;
BEGIN
WHILE (curdate <= bookings.now()::date) LOOP
utc_offset := interval '12 hours';
WHILE (utc_offset >= interval '2 hours') LOOP
INSERT INTO flights_bi
WITH flight (
airport_code,
airport_coord,
flight_id,
flight_no,
scheduled_time,
actual_time,
aircraft_code,
flight_type
) AS (
--
SELECT a.airport_code,
a.coordinates,
f.flight_id,
f.flight_no,
f.scheduled_departure,
f.actual_departure,
f.aircraft_code,
'departure'
FROM airports a,
flights f,
pg_timezone_names tzn
WHERE a.airport_code = f.departure_airport
AND f.actual_departure IS NOT NULL
AND tzn.name = a.timezone
AND tzn.utc_offset = local.utc_offset
AND timezone(a.timezone, f.actual_departure)::date = curdate
UNION ALL
--
SELECT a.airport_code,
a.coordinates,
f.flight_id,
f.flight_no,
f.scheduled_arrival,
f.actual_arrival,
f.aircraft_code,
'arrival'
FROM airports a,
flights f,
pg_timezone_names tzn
WHERE a.airport_code = f.arrival_airport
AND f.actual_arrival IS NOT NULL
AND tzn.name = a.timezone
AND tzn.utc_offset = local.utc_offset
AND timezone(a.timezone, f.actual_arrival)::date = curdate
)
SELECT f.airport_code,
f.airport_coord,
local.utc_offset,
f.flight_no,
f.flight_type,
f.scheduled_time,
f.actual_time,
f.aircraft_code,
s.seat_no,
s.fare_conditions,
t.passenger_id,
t.passenger_name
FROM flight f
JOIN seats s
ON s.aircraft_code = f.aircraft_code
LEFT JOIN boarding_passes bp
ON bp.flight_id = f.flight_id
AND bp.seat_no = s.seat_no
LEFT JOIN ticket_flights tf
ON tf.ticket_no = bp.ticket_no
AND tf.flight_id = bp.flight_id
LEFT JOIN tickets t
ON t.ticket_no = tf.ticket_no;
RAISE NOTICE '%, %', curdate, utc_offset;
utc_offset := utc_offset - interval '1 hour';
END LOOP;
curdate := curdate + 1;
END LOOP;
END;
$$;
demo=# select count(*) from flights_bi;
count
----------
30517076
(1 row)
demo=# select pg_size_pretty(pg_total_relation_size('flights_bi'));
pg_size_pretty
----------------
4127 MB
(1 row)
3000äžè¡ãš4 GBãå€æããŸããã ç¥ã¯ãã®éãç¥ã£ãŠããŸãããã©ãããããã«é©ããŠããŸãããã«ã¹ãã£ã³ã«ã¯çŽ10ç§ããããŸãã
ã€ã³ããã¯ã¹ãæ§ç¯ããå
BRINã€ã³ããã¯ã¹ã¯å°ããããªãŒããŒãããã³ã¹ããäœããæŽæ°ã¯é »ç¹ã«è¡ãããªããããããšãã°åæãŠãŒã¶ãŒãäœæã§ãããã¹ãŠã®ãã£ãŒã«ãã«å¯ŸããŠãã念ã®ãããå€ãã®ã€ã³ããã¯ã¹ãäœæã§ããã®ã¯ãŸããªç¶æ³ã§ãã¢ãããã¯ãªã¯ãšã¹ãã 圹ã«ç«ããªã-ããããŸããããããŠããŸãå¹æçã§ã¯ãªãã€ã³ããã¯ã¹ã§ããã確å®ã«ãã«ã¹ãã£ã³ãããããŸãåäœããŸãã ãã¡ãããã€ã³ããã¯ã¹ããŸã£ãã圹ã«ç«ããªããã£ãŒã«ãããããŸãã åçŽãªåžžèã¯ããããäŒããŸãã
ãããããã®ãããªã¢ããã€ã¹ã«èªåèªèº«ãå¶éããã®ã¯å¥åŠãªããšãªã®ã§ãããæ£ç¢ºãªåºæºãçå®ããããšããŸãã
ããŒã¿ã¯ãäœããã®æ¹æ³ã§ç©ççãªå Žæãšçžé¢ããå¿
èŠããããšè¿°ã¹ãŸããã ããã§ãPostgreSQLã¯ããŒãã«ã®ãã£ãŒã«ãã«é¢ããçµ±èšãåéããããã«ã¯çžé¢å€ãå«ãŸããããšãæãåºããŠãã ããã ãã®å€ã¯ãã¹ã±ãžã¥ãŒã©ãåŸæ¥ã®ã€ã³ããã¯ã¹ã¹ãã£ã³ãšããããããã¹ãã£ã³ã®ãããããéžæããããã«äœ¿çšãããBRINã€ã³ããã¯ã¹ã®é©åæ§ãè©äŸ¡ããããã«äœ¿çšã§ããŸãã
ãã®äŸã§ã¯ãããŒã¿ã¯æããã«æ¥ããšã«äžŠã¹ãããŠããŸãïŒschedule_timeãšactual_timeã®äž¡æ¹-å·®ã¯ãããã§ãïŒã ããã¯ãããŒãã«ã«è¡ãè¿œå ãããšãïŒåé€ããã³æŽæ°ããªãå ŽåïŒãããããé çªã«ãã¡ã€ã«ã«é
眮ãããããã§ãã è² è·ã®ã·ãã¥ã¬ãŒã·ã§ã³ã§ã¯ãORDER BYå¥ã䜿çšããŸããã§ããããããã£ãŠãååãšããŠã1æ¥ä»¥å
ã«æ¥ä»ã奜ããªããã«æ··åšãããããšãã§ããŸãããé åºãååšããå¿
èŠããããŸãã ãã§ãã¯ïŒ
demo=# analyze flights_bi;
ANALYZE
demo=# select attname, correlation from pg_stats where tablename='flights_bi'
order by correlation desc nulls last;
attname | correlation
--------------------+-------------
scheduled_time | 0.999994
actual_time | 0.999994
fare_conditions | 0.796719
flight_type | 0.495937
airport_utc_offset | 0.438443
aircraft_code | 0.172262
airport_code | 0.0543143
flight_no | 0.0121366
seat_no | 0.00568042
passenger_name | 0.0046387
passenger_id | -0.00281272
airport_coord |
(12 rows)
ãŒãã«è¿ãããªãå€ïŒçæ³çã«ã¯ããã®å Žåã®ããã«ãã©ã¹ãŸãã¯ãã€ãã¹1çšåºŠïŒã¯ãBRINã€ã³ããã¯ã¹ãé©åã§ããããšã瀺ããŸãã
2çªç®ãš3çªç®ã®å Žæã§ã¯ãfare_conditionãµãŒãã¹ã¯ã©ã¹ïŒåã«3ã€ã®äžæã®å€ãå«ãŸããŠããŸãïŒãšãã©ã€ãã¿ã€ãflight_typeïŒ2ã€ã®äžæã®å€ïŒãäºæããèŠã€ãããŸããã ããã¯ããªãã¯ã§ããæ£åŒã«ã¯çžé¢ã¯é«ãã§ãããå®éã«ã¯ãé£ç¶ããŠåãããããã€ãã®ããŒãžã§ãèãããããã¹ãŠã®æå³ãèŠã€ããå¯èœæ§ããããŸããã€ãŸããBRINã«ã¯æå³ããããŸããã
次ã«ãairport_utc_offsetã¿ã€ã ãŸãŒã³ããããŸãããã®äŸã§ã¯ãåãæ¥ãµã€ã¯ã«å
ã§ãã建èšäžãã®ç©ºæž¯ãã¿ã€ã ãŸãŒã³é ã«äžŠã¹ãããŸãã
ããã2ã€ã®ãã£ãŒã«ãïŒæéãšã¿ã€ã ãŸãŒã³ïŒã䜿çšããŠãå®éšãç¶ããŸãã
çžé¢éåã®å¯èœæ§
ããŒã¿ãå€æŽããããšã«ãããæ¢åã®ãæ§é å¥ãçžé¢ãç°¡åã«ç Žãããšãã§ããŸãã ããã§ã®ãã€ã³ãã¯ãç¹å®ã®å€ã®å€æŽã§ã¯ãªãããã«ãããŒãžã§ã³ããã€ã¹ã®å Žåã§ããå€ãããŒãžã§ã³ã®è¡ã¯1ããŒãžã§åé€ãããŸãããæ°ããããŒãžã§ã³ã¯ç©ºãã¹ããŒã¹ãããã°ã©ãã«ã§ãæ¿å
¥ã§ããŸãã ãã®ãããæŽæ°ã¯è¡å
šäœãå®å
šã«ã·ã£ããã«ããŸãã
éšåçã«ããã®çŸè±¡ã¯ãã¹ãã¬ãŒãžãã¡ã¯ã¿ãŒfillfactorã®å€ãæžããããšã§å¯ŸåŠã§ããŸããããã«ãããå°æ¥ã®æŽæ°ã®ããã«ããŒãžäžã®ã¹ããŒã¹ã®ããŒãžã³ãæ®ããŸãã ãããããã§ã«å·šå€§ãªããŒãã«ã®ããªã¥ãŒã ãå¢ããããã ãã§ããïŒ ããã«ãããã¯åé€ã®åé¡ã解決ããŸãããæ°ããè¡ã®ããã©ãããæºåãããæ¢åã®ããŒãžå
ã®ã©ããã«ã¹ããŒã¹ã解æŸããŸãã ãã®ãããæ¬æ¥ãªããã¡ã€ã«ã®çµããã«ãªã£ãŠããŸãè¡ã¯ãä»»æã®å Žæã«æ¿å
¥ãããŸãã
ãšããã§ãé¢çœãäºå®ã BRINã€ã³ããã¯ã¹ã«ã¯ããŒãã«è¡ãžã®åç
§ããªãããããã®ååšã¯HOTæŽæ°ã劚ããããšã¯ãããŸããããå¹²æžããŸãã
ãã®ããããŸããBRINã¯ããµã€ãºã倧ãããŠå·šå€§ãªããŒãã«çšã«èšèšãããŠããããŸã£ããæŽæ°ãããªããããããã«æŽæ°ãããŸãã ãã ããïŒããŒãã«ã®æåŸã«ïŒæ°ããè¡ãè¿œå ãããšããã°ãããçµæãåŸãããŸãã ãã®ã¢ã¯ã»ã¹æ¹æ³ã¯ãããŒã¿ãŠã§ã¢ããŠã¹ãšåæã¬ããŒãã«æ³šç®ããŠäœæããããããããã¯é©ãããšã§ã¯ãããŸããã
éžæãããµã€ãºãŸãŒã³
ãã©ãã€ãã®ããŒãã«ãæ±ã£ãŠããå ŽåããããããŸãŒã³ã®ãµã€ãºãéžæããéã®äž»ãªé¢å¿äºã¯ãBRINã€ã³ããã¯ã¹ã倧ãããªããããªãããã«ããããšã§ãã ãã®å ŽåãããŒã¿ãããæ£ç¢ºã«åæããäœè£ããããŸãã
ãããè¡ãã«ã¯ãäžæã®åå€ãéžæãããããã®å€ã衚瀺ãããããŒãžæ°ã確èªããŸãã å€ã®ããŒã«ã©ã€ãºã¯ãBRINã€ã³ããã¯ã¹ã®äœ¿çšãæåããå¯èœæ§ãé«ããŸãã ããã«ãèŠã€ãã£ãããŒãžæ°ã¯ããŸãŒã³ã®ãµã€ãºã決å®ããããã®ãã³ããšããŠæ©èœããŸãã å€ãããŒãã«ã®ãã¹ãŠã®ããŒãžã«ãåºãã£ãŠãããå ŽåãBRINã¯åœ¹ã«ç«ã¡ãŸããã
ãã¡ããããã®ææ³ã¯å
éšããŒã¿æ§é ã«å
¬æ£ãªç®ã§é©çšããå¿
èŠããããŸãã ããšãã°ãåæ¥ä»ïŒãŸãã¯ãæéãå«ãã¿ã€ã ã¹ã¿ã³ãïŒãäžæã®å€ãšèããããšã¯æå³ããããŸããããããæ¥æ°ã«äžžããå¿
èŠããããŸãã
çŽç²ã«æè¡çã«ã¯ããã®ãããªåæã¯é衚瀺ã®ctidåã®å€ã調ã¹ãããšã§å®è¡ã§ããè¡ããŒãžã§ã³ïŒTIDïŒãžã®ãã€ã³ã¿ãŒãæäŸããŸãïŒããŒãžå
ã®ããŒãžçªå·ãšè¡çªå·ã æ®å¿µãªãããTIDã2ã€ã®ã³ã³ããŒãã³ãã«å解ããéåžžã®æ¹æ³ã¯ãªããããããã¹ãè¡šçŸãä»ããŠåããã£ã¹ãããå¿
èŠããããŸãã
demo=# select min(numblk), round(avg(numblk)) avg, max(numblk)
from (
select count(distinct (ctid::text::point)[0]) numblk
from flights_bi
group by scheduled_time::date
) t;
min | avg | max
------+------+------
1192 | 1500 | 1796
(1 row)
demo=# select relpages from pg_class where relname = 'flights_bi';
relpages
----------
528172
(1 row)
æ¯æ¥ãããŒãžå
šäœã«ã»ãŒåçã«åæ£ãããŠãããæ¥ããããã«æ··ãã£ãŠããããšãããããŸãïŒ1500Ã365 =547500ãããã¯ãè¡š528172ã®ããŒãžæ°ã倧ããäžåã£ãŠããŸããïŒã å®éãããã¯ãã§ã«ã建èšäžãã«ç解ã§ããŸãã
ããã§éèŠãªæ
å ±ã¯ãç¹å®ã®ããŒãžæ°ã§ãã æšæºã®ãŸãŒã³ãµã€ãºã¯128ããŒãžã§ãæ¯æ¥9ã14åã®ãŸãŒã³ãå æããŸãã ããã¯é©åã ãšæãããŸããç¹å®ã®æ¥ããªã¯ãšã¹ããããšã10ïŒ
çšåºŠã®ãšã©ãŒãäºæ³ãããŸãã
è©ŠããŠã¿ãŸãããïŒ
demo=# create index on flights_bi using brin(scheduled_time);
CREATE INDEX
ã€ã³ããã¯ã¹ãµã€ãºã¯184 KBã®ã¿ã§ãã
demo=# select pg_size_pretty(pg_total_relation_size('flights_bi_scheduled_time_idx'));
pg_size_pretty
----------------
184 kB
(1 row)
ãã®å Žåã粟床ãç ç²ã«ããŠãŸãŒã³ã®ãµã€ãºã倧ããããããšã¯ã»ãšãã©æå³ããããŸããã å¿
èŠã«å¿ããŠå€ãæžããããšãã§ããŸããéã«ãã€ã³ããã¯ã¹ã®ãµã€ãºãšãšãã«ç²ŸåºŠãåäžããŸãã
次ã«ãã¿ã€ã ãŸãŒã³ãèŠãŠã¿ãŸãããã ããã§ãããçæ£é¢ãããè¡åããããšã¯ã§ããŸããããã¹ãŠã®å€ã¯æ¯æ¥ã®ããµã€ã¯ã«ãã®æ°ã§é€ç®ããå¿
èŠããããŸããããã¯ãåé
ãæ¯æ¥ç¹°ãè¿ãããããã§ãã ããã«ãã¿ã€ã ãŸãŒã³ãããŸããªããããååžå
šäœã確èªã§ããŸãã
demo=# select airport_utc_offset, count(distinct (ctid::text::point)[0])/365 numblk
from flights_bi
group by airport_utc_offset
order by 2;
airport_utc_offset | numblk
--------------------+--------
12:00:00 | 6
06:00:00 | 8
02:00:00 | 10
11:00:00 | 13
08:00:00 | 28
09:00:00 | 29
10:00:00 | 40
04:00:00 | 47
07:00:00 | 110
05:00:00 | 231
03:00:00 | 932
(11 rows)
å¹³åããŠãåã¿ã€ã ãŸãŒã³ã®ããŒã¿ã¯1æ¥ããã133ããŒãžãå æããŸãããååžã¯éåžžã«äžåäžã§ãããããããããã¹ã¯-ã«ã ãã£ãããŒãšã¢ããã£ã«ã¯6ããŒãžã®ã¿ã«åãŸããã¢ã¹ã¯ã¯ãšãã®åšèŸºå°åã§ã¯900æå¿
èŠã§ãã ããã§ã¯ãããã©ã«ãã®ãŸãŒã³ãµã€ãºã¯ééããªãé©åã§ã¯ãããŸããã äŸãšããŠ4ããŒãžãé
眮ããŸãããã
demo=# create index on flights_bi using brin(airport_utc_offset) with (pages_per_range=4);
CREATE INDEX
demo=# select pg_size_pretty(pg_total_relation_size('flights_bi_airport_utc_offset_idx'));
pg_size_pretty
----------------
6528 kB
(1 row)
å®è¡èšç»
次ã«ãã€ã³ããã¯ã¹ã®ä»çµã¿ãèŠãŠã¿ãŸãããã ããæ¥ãããšãã°1é±éåãéžæããŠã¿ãŸãããïŒãä»æ¥ãã¯ãã¢ããŒã¿ããŒã¹ã§bookings.nowé¢æ°ã«ãã£ãŠæ±ºå®ãããŸãïŒã
demo=# \set d 'bookings.now()::date - interval \'7 days\''
demo=# explain (costs off,analyze)
select *
from flights_bi
where scheduled_time >= :d and scheduled_time < :d + interval '1 day';
QUERY PLAN
--------------------------------------------------------------------------------
Bitmap Heap Scan on flights_bi (actual time=10.282..94.328 rows= 83954 loops=1)
Recheck Cond: ...
Rows Removed by Index Recheck: 12045
Heap Blocks: lossy= 1664
-> Bitmap Index Scan on flights_bi_scheduled_time_idx
(actual time=3.013..3.013 rows= 16640 loops=1)
Index Cond: ...
Planning time: 0.375 ms
Execution time: 97.805 ms
ã芧ã®ãšãããã¹ã±ãžã¥ãŒã©ã¯äœæãããã€ã³ããã¯ã¹ã䜿çšããŸããã ã©ããããæ£ç¢ºã§ããïŒ ããã¯ããµã³ããªã³ã°æ¡ä»¶ïŒããããããããŒãã¹ãã£ã³ããŒãã®è¡ïŒãæºããè¡ã®æ°ãšãã€ã³ããã¯ã¹ã䜿çšããŠååŸãããè¡ã®åèšæ°ïŒåããšã€ã³ããã¯ã¹ã®åãã§ãã¯ã«ãã£ãŠåé€ãããè¡ïŒã®æ¯çã«ãã£ãŠèšŒæãããŸãã ç§ãã¡ã®å Žåã83954 /ïŒ83954 + 12045ïŒã¯äºæ³ã©ããçŽ90ïŒ
ã§ãïŒãã®å€ã¯æ¥ã
å€åããŸãïŒã
ããããããã€ã³ããã¯ã¹ã¹ãã£ã³ããŒãã®å®éã®è¡ã®ã©ãã«çªå·16640ã衚瀺ãããŸãããïŒ å®éãèšç»ã®ãã®ããŒãã¯äžæ£ç¢ºãªïŒããŒãžïŒãããããããæ§ç¯ããŠããããããäœè¡åœ±é¿ãããã¯ããããŸããããäœãã衚瀺ããå¿
èŠããããŸãã ãããã£ãŠã絶æãããåããŒãžã«10è¡ãããšèããããŠããŸãã åèšã§ãããããããã«ã¯1664ããŒãžãå«ãŸããŸãïŒãã®å€ã¯ãããŒããããã¯ïŒlossy = 1664ããã確èªã§ããŸãïŒ-å€æããã®ã¯16640ã ãã§ããäžè¬ã«ãããã¯ç¡æå³ãªæ°åã§ããã泚æããå¿
èŠã¯ãããŸããã
空枯ã¯ã©ãã§ããïŒ ããšãã°ã1æ¥ããã28ããŒãžãå æãããŠã©ãžãªã¹ãã¯ã¿ã€ã ãŸãŒã³ã䜿çšããŸãã
demo=# explain (costs off,analyze)
select *
from flights_bi
where airport_utc_offset = interval '8 hours';
QUERY PLAN
----------------------------------------------------------------------------------
Bitmap Heap Scan on flights_bi (actual time=75.151..192.210 rows= 587353 loops=1)
Recheck Cond: (airport_utc_offset = '08:00:00'::interval)
Rows Removed by Index Recheck: 191318
Heap Blocks: lossy=13380
-> Bitmap Index Scan on flights_bi_airport_utc_offset_idx
(actual time=74.999..74.999 rows=133800 loops=1)
Index Cond: (airport_utc_offset = '08:00:00'::interval)
Planning time: 0.168 ms
Execution time: 212.278 ms
ç¹°ãè¿ããŸãããã¹ã±ãžã¥ãŒã©ãŒã¯äœæãããBRINã€ã³ããã¯ã¹ã䜿çšããŸãã 粟床ã¯æªããªããŸããïŒãã®å Žåã¯çŽ75ïŒ
ïŒãããã¯äºæ³ãããŸããçžé¢ã¯äœããªããŸãã
ãã¡ãããããã€ãã®BRINã€ã³ããã¯ã¹ïŒä»ã®ã€ã³ããã¯ã¹ãšåæ§ïŒã¯ãããããããã¬ãã«ã§çµåã§ããŸãã ããšãã°ãéžæããæã®ã¿ã€ã ãŸãŒã³ã®ããŒã¿ïŒ
demo=# \set d 'bookings.now()::date - interval \'60 days\''
demo=# explain (costs off,analyze)
select *
from flights_bi
where scheduled_time >= :d and scheduled_time < :d + interval '30 days'
and airport_utc_offset = interval '8 hours';
QUERY PLAN
---------------------------------------------------------------------------------
Bitmap Heap Scan on flights_bi (actual time=62.046..113.849 rows=48154 loops=1)
Recheck Cond: ...
Rows Removed by Index Recheck: 18856
Heap Blocks: lossy=1152
-> BitmapAnd (actual time=61.777..61.777 rows=0 loops=1)
-> Bitmap Index Scan on flights_bi_scheduled_time_idx
(actual time=5.490..5.490 rows=435200 loops=1)
Index Cond: ...
-> Bitmap Index Scan on flights_bi_airport_utc_offset_idx
(actual time=55.068..55.068 rows=133800 loops=1)
Index Cond: ...
Planning time: 0.408 ms
Execution time: 115.475 ms
BããªãŒãšã®æ¯èŒ
BRINãšåããã£ãŒã«ãã«éåžžã®BããªãŒã€ã³ããã¯ã¹ãäœæãããšã©ããªããŸããïŒ
demo=# create index flights_bi_scheduled_time_btree on flights_bi(scheduled_time);
CREATE INDEX
demo=# select pg_size_pretty(pg_total_relation_size('flights_bi_scheduled_time_btree'));
pg_size_pretty
----------------
654 MB
(1 row)
ããã¯ç§ãã¡ã®BRINã®
æ°åå以äžã«ãªããŸããïŒ ç¢ºãã«ãã¯ãšãªã®å®è¡é床ã¯ãããã«å¢å ããŸãã-çµ±èšã«ãããšãã¹ã±ãžã¥ãŒã©ã¯ããŒã¿ãç©ççã«é åºä»ãããããããããããæ§ç¯ããå¿
èŠããªãããšãç解ããæãéèŠãªã®ã¯ãã€ã³ããã¯ã¹æ¡ä»¶ãå確èªããå¿
èŠããªãããšã§ãïŒ
demo=# explain (costs off,analyze)
select *
from flights_bi
where scheduled_time >= :d and scheduled_time < :d + interval '1 day';
QUERY PLAN
----------------------------------------------------------------
Index Scan using flights_bi_scheduled_time_btree on flights_bi
(actual time=0.099..79.416 rows=83954 loops=1)
Index Cond: ...
Planning time: 0.500 ms
Execution time: 85.044 ms
ãããBRINã®çŸããã§ããå¹çãç ç²ã«ãã€ã€ãå€ãã®ã¹ããŒã¹ãç²åŸããŠããŸãã
æŒç®åã¯ã©ã¹
æå°å€
å€ãçžäºã«æ¯èŒã§ããããŒã¿åã®å ŽåãèŠçŽæ
å ±ã¯
æå°å€ãšæ倧å€ã§æ§æãã
ãŸãã 察å¿ããæŒç®åã¯ã©ã¹ã«ã¯ãminmaxãšããååãå«ãŸããŠããŸãïŒäŸïŒdate_minmax_opsïŒã å®éãç§ãã¡ã¯ãŸã ããããšã»ãšãã©ãèæ
®ããŸããã
å
æ¬ç
ãã¹ãŠã®ããŒã¿åã«æ¯èŒæŒç®ãå®çŸ©ãããŠããããã§ã¯ãããŸããã ããšãã°ã空枯ã®åº§æšãè¡šããã€ã³ãïŒã¿ã€ããã€ã³ãïŒçšã§ã¯ãããŸããã ãšããã§ããããçµ±èšããã®åã®çžé¢ã瀺ããªãçç±ã§ãïŒ
demo=# select attname, correlation
from pg_stats
where tablename='flights_bi' and attname = 'airport_coord';
attname | correlation
---------------+-------------
airport_coord |
(1 row)
ãããããããã®ã¿ã€ãã®å€ãã§ã¯ããå¢çé åãã®æŠå¿µãå°å
¥ã§ããŸããããšãã°ã幟äœåŠç圢ç¶ã®å¢çããã¯ã¹ã§ãã ãã®ããããã£ã
GiSTã€ã³ããã¯ã¹ã§ã©ã®ããã«äœ¿çšããããã«ã€ããŠè©³ãã説æããŸããã åæ§ã«ãBRINã䜿çšãããšã次ã®ã¿ã€ãã®åã«é¢ãããµããªãŒæ
å ±ãåéã§ããŸãã
ãŸãŒã³å
ã®ãã¹ãŠã®å€ã®å¢çé åã¯ãµããªãŒå€ã§ãã
GiSTãšã¯ç°ãªããBRINã®éèšå€ã¯ã€ã³ããã¯ã¹ä»ãããŒã¿ãšåãã¿ã€ãã§ããå¿
èŠããããŸãã ãã®ãããããšãã°ããã€ã³ãã®ã€ã³ããã¯ã¹ãäœæããããšã¯ã§ããŸããããBRINã§åº§æšãæ©èœããããšã¯æããã§ãããçµåºŠã¯ã¿ã€ã ãŸãŒã³ãšããªãå¯æ¥ã«é¢é£ããŠããŸãã 幞ããªããšã«ãåŒã«ãã£ãŠã€ã³ããã¯ã¹ãäœæãããã€ã³ããçž®éããé·æ¹åœ¢ã«å€æããæéã¯ãããŸããã åæã«ã極端ãªå Žåã瀺ãããã«ããŸãŒã³ã®ãµã€ãºã1ããŒãžã«èšå®ããŸãã
demo=# create index on flights_bi using brin (box(airport_coord)) with (pages_per_range=1);
CREATE INDEX
ãã®æ¥µç«¯ãªã·ããªãªã§ããã€ã³ããã¯ã¹ã¯ããã30 MBãã䜿çšããŸããã
demo=# select pg_size_pretty(pg_total_relation_size('flights_bi_box_idx'));
pg_size_pretty
----------------
30 MB
(1 row)
ããã§ã空枯ã座æšã«å¶éããŠã¯ãšãªãäœæã§ããŸãã ããšãã°ã次ã®ããã«ïŒ
demo=# select airport_code, airport_name
from airports
where box(coordinates) <@ box '120,40,140,50';
airport_code | airport_name
--------------+-----------------
KHV | -
VVO |
(2 rows)
確ãã«ããã©ã³ããŒã¯ã€ã³ããã¯ã¹ã®äœ¿çšãæåŠããŸãã
demo=# analyze flights_bi;
ANALYZE
demo=# explain select * from flights_bi
where box(airport_coord) <@ box '120,40,140,50';
QUERY PLAN
---------------------------------------------------------------------
Seq Scan on flights_bi (cost=0.00..985928.14 rows=30517 width=111)
Filter: (box(airport_coord) <@ '(140,50),(120,40)'::box)
ãªãã§ïŒ å®å
šãªã¹ãã£ã³ãçŠæ¢ããŠèŠãŠã¿ãŸãããã
demo=# set enable_seqscan = off;
SET
demo=# explain select * from flights_bi
where box(airport_coord) <@ box '120,40,140,50';
QUERY PLAN
--------------------------------------------------------------------------------
Bitmap Heap Scan on flights_bi (cost=14079.67..1000007.81 rows=30517 width=111)
Recheck Cond: (box(airport_coord) <@ '(140,50),(120,40)'::box)
-> Bitmap Index Scan on flights_bi_box_idx
(cost=0.00..14072.04 rows= 30517076 width=0)
Index Cond: (box(airport_coord) <@ '(140,50),(120,40)'::box)
ã€ã³ããã¯ã¹
ã¯äœ¿çš
ã§ããŸãããã¹ã±ãžã¥ãŒã©ã¯ãããããããããŒãã«å
šäœã«æ§ç¯ããå¿
èŠããããšèããŠããŸãããã®å Žåããã«ã¹ãã£ã³ã奜ãããšã¯é©ãããšã§ã¯ãããŸããã ããã§ã®åé¡ã¯ããžãªã¡ããªã¿ã€ãã®å ŽåãPostgreSQLãçµ±èšãåéããªããããã¹ã±ãžã¥ãŒã©ãç²ç®çã«åäœããå¿
èŠãããããšã§ãã
demo=# select * from pg_stats where tablename = 'flights_bi_box_idx' \gx
-[ RECORD 1 ]----------+-------------------
schemaname | bookings
tablename | flights_bi_box_idx
attname | box
inherited | f
null_frac | 0
avg_width | 32
n_distinct | 0
most_common_vals |
most_common_freqs |
histogram_bounds |
correlation |
most_common_elems |
most_common_elem_freqs |
elem_count_histogram |
ããã ããããã€ã³ããã¯ã¹èªäœã«ã€ããŠäžæºã¯ãªããæ©èœããŸãããæªãã¯ãããŸããã
demo=# explain (costs off,analyze)
select * from flights_bi where box(airport_coord) <@ box '120,40,140,50';
QUERY PLAN
----------------------------------------------------------------------------------
Bitmap Heap Scan on flights_bi (actual time=158.142..315.445 rows= 781790 loops=1)
Recheck Cond: (box(airport_coord) <@ '(140,50),(120,40)'::box)
Rows Removed by Index Recheck: 70726
Heap Blocks: lossy=14772
-> Bitmap Index Scan on flights_bi_box_idx
(actual time=158.083..158.083 rows=147720 loops=1)
Index Cond: (box(airport_coord) <@ '(140,50),(120,40)'::box)
Planning time: 0.137 ms
Execution time: 340.593 ms
çµè«ã¯ãæããã«ãããã¯æ¬¡ã®ãšããã§ãããžãªã¡ããªã«å°ãªããšãéèŠã§ãªããã®ãå¿
èŠãªå ŽåãPostGISãå¿
èŠã§ãã ãããã«ããã圌ã¯çµ±èšã®åéæ¹æ³ãç¥ã£ãŠããŸãã
å
åŽ
BRINã€ã³ããã¯ã¹å
ãèŠããšãéåžžã®pageinspectæ¡åŒµãå¯èœã«ãªããŸãã
ãŸããã¡ã¿æ
å ±ã¯ãŸãŒã³ã®ãµã€ãºãšrevmapçšã«äºçŽãããŠããããŒãžæ°ã瀺ããŸãã
demo=# select * from brin_metapage_info(get_raw_page('flights_bi_scheduled_time_idx',0));
magic | version | pagesperrange | lastrevmappage
------------+---------+---------------+----------------
0xA8109CFA | 1 | 128 | 3
(1 row)
ããã§ãããŒãž1ãã3ã¯revmapã§ãããæ®ãã¯èŠçŽããŒã¿ã§ãã revmapããåãŸãŒã³ã®èŠçŽããŒã¿ãžã®ãªã³ã¯ãååŸã§ããŸãã ããŒãã«ã®æåã®128ããŒãžãã«ããŒããæåã®ãŸãŒã³ã«é¢ããæ
å ±ã¯æ¬¡ã®ãšããã§ãã
demo=# select * from brin_revmap_data(get_raw_page('flights_bi_scheduled_time_idx',1)) limit 1;
pages
---------
(6,197)
(1 row)
ãããŠãããã«èŠçŽããŒã¿èªäœããããŸãïŒ
demo=# select allnulls, hasnulls, value
from brin_page_items(get_raw_page('flights_bi_scheduled_time_idx', 6 ), 'flights_bi_scheduled_time_idx')
where itemoffset = 197 ;
allnulls | hasnulls | value
----------+----------+----------------------------------------------------
f | f | {2016-08-15 02:45:00+03 .. 2016-08-15 17:15:00+03}
(1 row)
次ã®ãŸãŒã³ïŒ
demo=# select * from brin_revmap_data(get_raw_page('flights_bi_scheduled_time_idx',1)) offset 1 limit 1;
pages
---------
(6,198)
(1 row)
demo=# select allnulls, hasnulls, value from brin_page_items(get_raw_page('flights_bi_scheduled_time_idx', 6 ), 'flights_bi_scheduled_time_idx') where itemoffset = 198 ;
allnulls | hasnulls | value
----------+----------+----------------------------------------------------
f | f | {2016-08-15 06:00:00+03 .. 2016-08-15 18:55:00+03}
(1 row)
ãªã©ãªã©ã
å
å«ã¯ã©ã¹ã®å Žåãå€ãã£ãŒã«ãã«ã¯æ¬¡ã®ããã«è¡šç€ºãããŸã
{(94.4005966186523,69.3110961914062),(77.6600036621,51.6693992614746) .. f .. f}
æåã®å€ã¯åè§åœ¢ãå²ã¿ãæ«å°Ÿã®æåãfãã¯ç©ºã®èŠçŽ ããªãããšïŒæåïŒãšçµåã§ããªãå€ããªãããšïŒ2çªç®ïŒãæå³ããŸãã å®éãé£çµãããŠããªãå€ã®å¯äžã®ã±ãŒã¹ã¯ãIPv4ããã³IPv6ã¢ãã¬ã¹ïŒinetããŒã¿åïŒã§ãã
ããããã£
é¢é£ãããªã¯ãšã¹ã
ã以åã«äžããããããšãæãåºãããŠãã ããã
ã¡ãœããã®ããããã£ïŒ
amname | name | pg_indexam_has_property
--------+---------------+-------------------------
brin | can_order | f
brin | can_unique | f
brin | can_multi_col | t
brin | can_exclude | f
ã€ã³ããã¯ã¹ã¯è€æ°ã®åã«ããã£ãŠäœæã§ããŸãã ãã®å Žåãåããšã«åå¥ã®èŠçŽæ
å ±ãåéãããŸããããŸãŒã³ããšã«ãŸãšããŠä¿åãããŸãã ãã¡ãããåããŸãŒã³ãµã€ãºããã¹ãŠã®åã«é©ããŠããå Žåããã®ãããªã€ã³ããã¯ã¹ã¯æå³ããããŸãã
ã€ã³ããã¯ã¹ããããã£ïŒ
name | pg_index_has_property
---------------+-----------------------
clusterable | f
index_scan | f
bitmap_scan | t
backward_scan | f
æããã«ãããããããã¹ãã£ã³ã®ã¿ããµããŒããããŠããŸãã
ããããã¯ã©ã¹ã¿ãªã³ã°ã®æ¬ åŠã¯æžæãå¯èœæ§ããããŸãã BRINã€ã³ããã¯ã¹ã¯è¡ã®ç©ççãªé åºã®åœ±é¿ãåããããããããã®äžã§ããŒã¿ãã¯ã©ã¹ã¿åã§ããã®ã¯è«ççã§ããããïŒ ãã ãããéåžžã®ãã€ã³ããã¯ã¹ïŒããŒã¿ã®çš®é¡ã«å¿ããŠBããªãŒãŸãã¯GiSTïŒãäœæãããããã¯ã©ã¹ã¿ãŒåã§ããå Žåãé€ããŸãã ãããããšããã§ãåæ§ç¯äžã®æä»ããã¯ãã¢ããã¿ã€ã ãããã³ãã£ã¹ã¯é åã®æ¶è²»ãèæ
®ããŠããããã巚倧ãªããŒãã«ãã¯ã©ã¹ã¿ãŒåãããã§ããïŒ
åã¬ãã«ã®ããããã£ïŒ
name | pg_index_column_has_property
--------------------+------------------------------
asc | f
desc | f
nulls_first | f
nulls_last | f
orderable | f
distance_orderable | f
returnable | f
search_array | f
search_nulls | t
äžç¢ºå®ãªå€ãæ±ãå¯èœæ§ã«å ããŠãé£ç¶ãããããã·ã¥ãããããŸãã
çµäº