Friendsã PG Day'16ãã·ã¢ã¯ç¡äºã«çµäºããŸãããç§ãã¡ã¯äžæ¯ã€ããŠãå°æ¥ã®ã€ãã³ããããã«é¢çœããããªãã«ãšã£ãŠåœ¹ç«ã€ãã®ã«ããæ¹æ³ããã§ã«èããŠããŸãã ç§ãã¡ã¯ãç§ãã¡ã®æèŠã§ã¯ãPostgresã«é¢ããè峿·±ãè³æãå
¬éãç¶ããã³ã¡ã³ãã§ããªããšé£çµ¡ãåããŸãã 仿¥ã¯ãPostgreSQLã®ã€ã³ããã¯ã¹ã«ã€ããŠã®Pat Shaughnessyã®èšäºã®ç¿»èš³ã玹ä»ããŸããã€ã³ããã¯ã¹ã¯ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ãµãŒããŒã®æã匷åã§éèŠãªæ©èœã®1ã€ã§ããããšã¯èª°ããç¥ã£ãŠããŸãã å€ããã°ããèŠã€ããæ¹æ³ ã€ã³ããã¯ã¹ãäœæããŸãã 2ã€ã®ããŒãã«ãçµã¿åããããšãã«èŠããŠããå¿
èŠãããããšã¯äœã§ããïŒ ã€ã³ããã¯ã¹ãäœæããŸãã åäœãé
ããªã£ãSQLã¯ãšãªãé«éåããæ¹æ³ã¯ïŒ ã€ã³ããã¯ã¹ãäœæããŸãã
ãããããããã®ã€ã³ããã¯ã¹ã¯äœã§ããïŒ ãŸãã
ã©ã®ããã«ããŒã¿ããŒã¹æ€çŽ¢ãé«éåããŸããïŒ èª¿ã¹ãããã«ãCã§PostgreSQLããŒã¿ããŒã¹ãµãŒããŒã®ãœãŒã¹ã³ãŒããèªã¿ããã¬ãŒã³ããã¹ãå€ã®ã€ã³ããã¯ã¹ãã©ã®ããã«æ¢ããã確èªããããšã«ããŸããã è€éãªã¢ã«ãŽãªãºã ãšå¹ççãªããŒã¿æ§é ãèŠã€ããããšãæåŸ
ãããŠããŸããã ãããŠãç§ã¯ããããèŠã€ããŸããã 仿¥ã¯ãPostgreså
ã§ã€ã³ããã¯ã¹ãã©ã®ããã«èŠãããã瀺ããããããã©ã®ããã«æ©èœãããã説æããŸãã
ç§ãèŠã€ããããšãæåŸ
ããŠããªãã£ãã®ã¯ãPostgresã®ãœãŒã¹ã³ãŒããèªãã§ãããšãã«æåã«çºèŠããããšã§ããããã¯ãã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã®çè«ã®äžå¿ã«ãããŸãã Postgresã®ãœãŒã¹ã³ãŒããèªãããšã¯ãåŠæ ¡ã«æ»ããè¥ãé ã«ååãªæéããªãã£ãç§ç®ãå匷ããããšã«ãªããŸããã Postgreså
ã®Cã«é¢ããã³ã¡ã³ãã¯ã圌ãè¡ãããšã ãã§ãªãããã®
çç±ã説æããŠããŸãã
é æ¬¡ã¹ãã£ã³ïŒãã€ã³ãã¬ã¹æ€çŽ¢
NautilusããŒã ãå»ã£ããšãã圌ãã¯äœ¿ãæããããã»ãšãã©æ°çµ¶ããŠããŸãããPostgresã®é 次ã¹ãã£ã³ã¢ã«ãŽãªãºã ã¯ããŠãŒã¶ãŒããŒãã«å
ã®ãã¹ãŠã®ãšã³ããªã軜çã«ã«ãŒãããŸããã Captain NemoãèŠã€ããããã«ãã®ç°¡åãªSQLã¯ãšãªãå®è¡ãã
以åã®æçš¿ãæãåºããŠãã ããã
Postgresã¯ãªã¯ãšã¹ããåŠçãåæãããã³èšç»ããŸããã æ¬¡ã«ãé æ¬¡ã¹ãã£ã³ãã©ã³ããŒãïŒSEQSCANïŒãå®è¡ããPostgreså
ã®C颿°ã§ãã
ExecSeqScanã ãCaptain Nemoãããã«èŠã€ããŸããã
ããããPostgresã¯äžå¯è§£ã«ããŠãŒã¶ãŒããŒãã«å
šäœã埪ç°ãç¶ããåååããCaptain Nemoããšæ¯èŒããŸããã
ããŒãã«ã«äœçŸäžãã®ã¬ã³ãŒããããå Žåãããã»ã¹ã«ã¯éåžžã«é·ãæéãããããšæ³åããŠãã ããã ãã¡ããããœãŒããåé€ããèŠã€ãã£ãæåã®ååã®ã¿ãåãå
¥ããããããã«ã¯ãšãªãæžãæããããšã§ãããåé¿ã§ããŸãããããæ·±ãåé¡ã¯ãPostgresãã¿ãŒã²ããæååãæ€çŽ¢ããæ¹æ³ã®éå¹çæ§ã§ãã é æ¬¡ã¹ãã£ã³ã䜿çšããŠãŠãŒã¶ãŒããŒãã«ã®åå€ããCaptain Nemoããšæ¯èŒããã®ã¯é
ããéå¹ççã§ãããŒãã«ã«ååã衚瀺ãããã©ã³ãã ãªé åºã«äŸåããŸãã ç§ãã¡ã¯äœãééã£ãŠããŸããïŒ ãã£ãšè¯ãæ¹æ³ãããã¯ãã§ãïŒ
çãã¯ç°¡åã§ããã€ã³ããã¯ã¹ãäœæããã®ãå¿ããŠããŸããã ããããã£ãŠã¿ãŸãããã
ã€ã³ããã¯ã¹äœæ
ã€ã³ããã¯ã¹ã®äœæã¯éåžžã«ç°¡åã§ã-ãã®ã³ãã³ããå®è¡ããã ãã§ãïŒ
ãã¡ãããRubyéçºè
ãšããŠã代ããã«ActiveRecord add_indexç§»è¡ã䜿çšããŸããããã«ããããå
éšã§ãåãCREATE INDEXã³ãã³ããå®è¡ãããŸãã éžæã¯ãšãªãå床å®è¡ãããšãPostgresã¯éåžžã©ãããã©ã³ããªãŒãäœæããŸãããä»åã¯å°ãç°ãªããŸãã
äžéšã§ã¯ãPostgresãSEQSCANã®ä»£ããã«INDEXSCANã䜿çšããããšã«æ³šæããŠãã ããã SEQSCANãšã¯ç°ãªããINDEXSCANã¯ãŠãŒã¶ãŒããŒãã«å
šäœãã¹ãã£ã³ããŸããã 代ããã«ãäœæããã°ããã®ã€ã³ããã¯ã¹ã䜿çšããŠãCaptain Nemoã¬ã³ãŒãããã°ããå¹ççã«æ€çŽ¢ããŠè¿ããŸãã
ã€ã³ããã¯ã¹ãäœæããããšã§ããã©ãŒãã³ã¹ã®åé¡ã¯è§£æ±ºããŸããããå€ãã®è峿·±ãæªåçã®è³ªåãæ®ããŸããã
- Postgresã®ã€ã³ããã¯ã¹ãšã¯æ£ç¢ºã«ã¯äœã§ããïŒ
- PostgresããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããŠã€ã³ããã¯ã¹ãããããèŠãããšãã§ãããã ã©ã®ããã«èŠããã§ããããïŒ
- ã€ã³ããã¯ã¹ã¯ã©ã®ããã«æ€çŽ¢ãé«éåããŸããïŒ
Postgresã®ãœãŒã¹ã³ãŒãã調ã¹ãŠããããã®è³ªåã«çããŠã¿ãŸãããã
Postgresã®ã€ã³ããã¯ã¹ãšã¯äœã§ããïŒ
ãŸããCREATE INDEXããŒã ã®
ããã¥ã¡ã³ããã芧ãã ããã
ããã«ãã€ã³ããã¯ã¹ã®äœæã«äœ¿çšã§ãããã¹ãŠã®ãªãã·ã§ã³ïŒUNIQUEãCONCURRENTLYãªã©ïŒã衚瀺ãããŸãã USINGã¡ãœãããªã©ã®ãªãã·ã§ã³ãããããšã«æ³šæããŠãã ããã 圌ã¯Postgresã«ã©ã®ã€ã³ããã¯ã¹ãå¿
èŠããäŒããŸãã åãããŒãžã®äžã«ãUSINGããŒã¯ãŒãã®ã¡ãœããåŒæ°ã«é¢ããæ
å ±ããããŸãã
Postgresã¯4çš®é¡ã®ã€ã³ããã¯ã¹ãå®è£
ããŠããããšãããããŸã[çŽã trans .:ããã«ããã®èšäºã¯BRINãä»ã®æ°ããã€ã³ããã¯ã¹ããªãšãŒã·ã§ã³ãç»å Žããåã«æžãããŸããã ããŸããŸãªã¿ã€ãã®ããŒã¿ã«ãããŸããŸãªç¶æ³ã§äœ¿çšã§ããŸãã USINGãæå®ããªãã£ããããindex_users_on_nameã€ã³ããã¯ã¹ã¯ããã©ã«ãã¿ã€ãã§ãããbtreeãïŒãŸãã¯BããªãŒïŒã€ã³ããã¯ã¹ã§ãã
ãããæåã®æãããã§ããPostgresã€ã³ããã¯ã¹ã¯BããªãŒã§ãã ããããBããªãŒãšã¯äœã§ããïŒ ã©ãã§åœŒãèŠã€ããããšãã§ããŸããïŒ ãã¡ãããPostgresã®å
éšã§ãïŒ ãbtreeïŒããå«ãPostgres Cãã¡ã€ã«ã®ãœãŒã¹ã³ãŒããæ€çŽ¢ããŸããã
éèŠãªçµæã¯å€ªåã§ç€ºãããŠããŸããã./ backend / access / nbtreeãããã®ãã£ã¬ã¯ããªå
ã«READMEãã¡ã€ã«ããããŸãã ãããèªã¿ãŸãããïŒ
é©ããããšã«ããã®READMEãã¡ã€ã«ã¯è©³çްãª12ããŒãžã®ããã¥ã¡ã³ãã§ããããšã倿ããŸããã Postgresã®ãœãŒã¹ã³ãŒãã«ã¯ãCã³ãŒãã«é¢ããæçšã§è峿·±ãã³ã¡ã³ãã ãã§ãªããããŒã¿ããŒã¹ãµãŒããŒã®çè«ãšå®è£
ã«é¢ããããã¥ã¡ã³ããå«ãŸããŠããŸãã ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®ã³ãŒããèªãã§çè§£ããããšã¯ãã°ãã°å°é£ã§æãããã§ãããPostgreSQLã§ã¯ããã§ã¯ãããŸããã Postgresã®éçºè
ã¯ãããªããšç§ã圌ãã®ä»äºãçè§£ã§ããããã«å€å€§ãªåªåãããŸããã
READMEããã¥ã¡ã³ãã®ã¿ã€ãã«-ãBtree Indexingã-ãã£ã¬ã¯ããªã«ãPostgresã§BããªãŒã€ã³ããã¯ã¹ãå®è£
ããCã³ãŒããå«ãŸããŠããããšã確èªããŸãã ããããæåã®æã¯ããã«è峿·±ãïŒããã¯ãBããªãŒãšã¯äœããpostgresã€ã³ããã¯ã¹ãã©ã®ããã«æ©èœãããã説æããç§åŠè«æãžã®åç
§ã§ãïŒLehmanãšYaoã«ãã£ãŠäœæã
ããBããªãŒã®åææäœã®å¹ççãªãã㯠ïŒ
ãã®ç§åŠçç ç©¶ã®å©ããåããŠãB-Treeãšã¯äœããçè§£ããããšããŸãã
BããªãŒã€ã³ããã¯ã¹ã¯ã©ã®ããã«èŠããŸããïŒ
ãªãŒãã³ãšã€ãªã®ç ç©¶ã¯ã1981幎ã«BããªãŒã¢ã«ãŽãªãºã ã«å ãããã驿°çãªå€æŽã«ã€ããŠèª¬æããŠããŸãã ããã«ã€ããŠã¯å°ãåŸã§è©±ããŸãããã ãããã圌ãã¯BããªãŒã®ããŒã¿æ§é ã®ç°¡åãªç޹ä»ããå§ããŸããããã¯1972幎ã«9幎åã«çºæãããŸããã ãããã®å³ã®1ã€ã¯ãåçŽãªBããªãŒã®äŸã瀺ããŠããŸãã
BããªãŒãšããçšèªã¯ãè±èªã®ãbalanced treeã-ãbalanced treeãã®ç¥èªã§ãã ãã®ã¢ã«ãŽãªãºã ã«ãããæ€çŽ¢ãç°¡åãã€é«éã«ãªããŸãã ããšãã°ããã®äŸã§å€53ãæ€çŽ¢ããå Žåãå€40ãå«ãã«ãŒãããŒãããéå§ããŸãã
æ€çŽ¢å€53ãšããªãŒããŒãã§èŠã€ãã£ãå€ãæ¯èŒããŸãã 53-40ãè¶
ããŠããŸããïŒ 53ã¯40ãã倧ããããããã€ã³ã¿ãŒãå³äžã«ç§»åããŸãã 29ãæ¢ããŠããããå·Šã«è¡ããŸãã å³åŽã®ãã€ã³ã¿ãŒã¯ãã倧ããªå€ã«ã€ãªãããå·ŠåŽã®ãã€ã³ã¿ãŒã¯ããå°ããªå€ã«ã€ãªãããŸãã
ããªãŒã®æ¬¡ã®åããŒããžã®ãã€ã³ã¿ãŒããã©ããšã2ã€ã®å€ãå«ãããŒããèŠã€ãããŸãã
ä»åã¯ã53ã47ããã³62ãšããã«æ¯èŒãã47 <53 <62ã§ããããšãããããŸããããªãŒããŒãã®å€ã¯ãœãŒããããŠãããããããã¯ç°¡åã§ãã ä»ãç§ãã¡ã¯ã»ã³ã¿ãŒãµã€ã³ããã©ããŸãã
ããã«ã¯ããã§ã«3ã€ã®å€ãæã€å¥ã®ããªãŒããŒãããããŸãã
ãœãŒããããæ°åã®ãªã¹ãã確èªããåŸã51 <53 <56ãèŠã€ãã4ã€ã®ãã€ã³ã¿ãŒã®2çªç®ã«åŸããŸãã
æåŸã«ãããªãŒã®èããŒãã«å°éããŸãã
ãããŠãããã«ç§ãã¡ã®æ±ããŠãã䟡å€53ããããŸãïŒ
BããªãŒã¢ã«ãŽãªãºã ã¯ã次ã®çç±ã§æ€çŽ¢ãé«éåããŸãã
- åããŒãå
ã®å€ïŒããŒãšåŒã°ããïŒããœãŒãããŸãã
- ãã©ã³ã¹ãåããŠããŸããããŒã¯ããŒãéã§åçã«åæ£ãããããããŒãããå¥ã®ããŒããžã®é·ç§»ã®æ°ãæå°éã«æããããŸãã åãã€ã³ã¿ãŒã¯ãåŸç¶ã®ååããŒããšã»ãŒåãæ°ã®ããŒãå«ãåããŒãã«ã€ãªãããŸãã
Postgresã€ã³ããã¯ã¹ã¯ã©ã®ããã«èŠããŸããïŒ
ãªãŒãã³ãšã€ãªã¯30幎以äžåã«ãã®å³ãæããŸããã 仿¥ã®Postgresã®åäœãšã¯äœã®é¢ä¿ããããŸããïŒ é©ãã¹ãããšã«ãåã«äœæããindex_users_on_nameã€ã³ããã¯ã¹ã¯ãç§åŠè«æã®ãã®ãŸãã«å³ã«éåžžã«äŒŒãŠããŸãã2014幎ã«ã1981幎ã®å³ãšãŸã£ããåããããªã€ã³ããã¯ã¹ãäœæããŸããã
CREATE INDEXã³ãã³ããå®è¡ãããšãPostgresã¯BããªãŒã®ãŠãŒã¶ãŒããŒãã«ãããã¹ãŠã®ååãä¿åããŸããã ãããã¯æšã®éµã«ãªããŸããã Postgresã®BããªãŒã€ã³ããã¯ã¹å
ã®ããŒãã¯æ¬¡ã®ããã«ãªããŸãã
ã€ã³ããã¯ã¹å
ã®åãšã³ããªã¯ãIndexTupleDataãšåŒã°ããCæ§é ã§æ§æããããã®åŸã«ãããããããšå€ãç¶ããŸãã Postgresã¯ããããããã䜿çšããŠãããŒã®ã€ã³ããã¯ã¹å±æ§ãNULLã§ãããã©ãããèšé²ããŠã¹ããŒã¹ãç¯çŽããŸãã å®éã®å€ã¯ãããããããã®åŸã®ã€ã³ããã¯ã¹ã«ãããŸãã
IndexTupleDataã®æ§é ã詳ããèŠãŠã¿ãŸãããã
äžã®å³ã¯ãåIndexTupleDataæ§é ã«ä»¥äžãå«ãŸããŠããããšã瀺ããŠããŸãã
- t_tidïŒããã¯ãå¥ã®ã€ã³ããã¯ã¹ã¿ãã«ãŸãã¯ããŒã¿ããŒã¹å
ã®ã¬ã³ãŒããžã®ãã€ã³ã¿ã§ãã ããã¯Cã®ç©çã¡ã¢ãªãžã®ãã€ã³ã¿ã§ã¯ãªãããšã«æ³šæããŠãã ããã代ããã«ãã¡ã¢ãªã®ããŒãžã§ç®çã®å€ãèŠã€ããããã«Postgresã䜿çšã§ããæ°å€ãå«ãŸããŠããŸãã
- t_infoïŒã€ã³ããã¯ã¹ã®èŠçŽ ã«é¢ããæ
å ±ãå«ãŸããŸããããšãã°ããã®äžã«ããå€ã®æ°ããnullãã©ãããªã©ã§ãã
ãããããããçè§£ããããã«ãindex_users_on_nameã€ã³ããã¯ã¹ããããã€ãã®ãšã³ããªã衚瀺ããŸãããã
å€ããŠãŒã¶ãŒããŒãã«ã®äžéšã®ååã«çœ®ãæããŸããã ããªãŒã®æäžäœããŒãã«ã¯ãããŒãDr. ãšããã»ã¯ã³ãããšããžã¥ãªã¢ã¹ã»ããŠããŠã¹ããŒãããããŠäž-ããžã¥ãªã¢ã¹ã»ããŠããŠã¹ããŒããšããžã£ã¹ãã³ã»ãããã³ãã ãªãŒãã³ããã³ã€ãªå³ãšã¯ç°ãªããPostgresã¯ååããŒãã§èŠªããŒãç¹°ãè¿ããŸãã ããã§ã¯ããJulius PowlowskiããæäžäœããŒããšåããŒãã®ããŒã§ãã äžäœããŒãã®t_tidãã€ã³ã¿ãŒã¯ãäžäœââããŒãã®åãJuliusåãåç
§ããŸãã
PostgresãããŒå€ãBããªãŒããŒãã«ä¿åããæ¹æ³ã®è©³çްã«ã€ããŠã¯ãitup.hããããŒãã¡ã€ã«ãåç
§ããŠãã ããã

IndexTupleData
postgresql.orgã§è¡šç€º
Captain Nemoãå«ãBããªãŒããŒããæ€çŽ¢ãã
å
ã®SELECTã¯ãšãªã«æ»ããŸãããã
Postgresã¯index_users_on_nameã€ã³ããã¯ã¹ã§ãCaptain Nemoããã©ã®ãããæ£ç¢ºã«æ¢ããŸããïŒ åã®èšäºã§èª¿ã¹ãã·ãŒã±ã³ã·ã£ã«ã¹ãã£ã³ãããé«éã«ã€ã³ããã¯ã¹ã䜿çšããã®ã¯ãªãã§ããïŒ èª¿ã¹ãããã«ãå°ããºãŒã ã¢ãŠãããŠãã€ã³ããã¯ã¹ã®ãŠãŒã¶ãŒåãèŠãŠã¿ãŸãããã
ããã¯ãBããªãŒindex_users_on_nameã®ã«ãŒãããŒãã§ãã ååãåãŸãããã«ãæšã暪ã«çœ®ããŸãã 4ã€ã®ååãš1ã€ã®NULLå€ã衚瀺ãããŸãã index_users_on_nameãäœæãããšãã«ãPostgresããã®ã«ãŒãããŒããäœæããŸããã ã€ã³ããã¯ã¹ã®å§ãŸãã瀺ãæåã®NULLå€ã«å ããŠãæ®ãã®4ã€ã®å€ã¯ã¢ã«ãã¡ãããé ã«ã»ãŒåçã«ååžããŠããããšã«æ³šæããŠãã ããã
BããªãŒã¯ãã©ã³ã¹ã®åããããªãŒã§ããããšãæãåºãããŠãã ããã ãã®äŸã§ã¯ãBããªãŒã«5ã€ã®åããŒãããããŸãã
- å士ã®åã®ã¢ã«ãã¡ãããå ãšããã»ã¯ã³ã;
- å士ã®éã«ããåå ãšããã»ã¯ã³ããšãžã¥ãªã¢ã¹ã»ããŠããŠã¹ããŒã
- Julius PowlowskiãšMonte Nicolasã®éã«ããååã
- ãªã©
Captain Nemoãšããååãæ€çŽ¢ãããšãPostgresã¯æåã®å³äžç¢å°ã«åŸããŸãã ããã¯ãNemoè¹é·ãã¢ã«ãã¡ãããé ã«Dr. ãšããã»ã¯ã³ãïŒ
ã芧ã®ãšãããå³åŽã®Postgresã¯Captain Nemoãå«ãBããªãŒããŒããèŠã€ããŸããã ç§ã®ãã¹ãã§ã¯ããŠãŒã¶ãŒããŒãã«ã«1000åã®ååã远å ããŸããã ãã®åBããªãŒããŒãã«ã¯ãçŽ200ã®ååïŒæ£ç¢ºã«ã¯240ïŒãå«ãŸããŠããŸãã ãã®ãããBããªãŒã¢ã«ãŽãªãºã ã¯Postgresã§ã®æ€çŽ¢ã倧å¹
ã«çµã蟌ã¿ãŸããã
Postgresããã®ãã¹ãŠã®ããŒãããã¿ãŒã²ããBããªãŒããŒããèŠã€ããããã«äœ¿çšããç¹å®ã®ã¢ã«ãŽãªãºã ã®è©³çްã«ã€ããŠã¯ã_bt_search颿°ãåç
§ããŠãã ããã

_bt_search
postgresql.orgã§è¡šç€º
ç¹å®ã®BããªãŒããŒãå
ã§Captain Nemoãæ€çŽ¢ãã
Postgresã¯æ€çŽ¢ã¹ããŒã¹ãçŽ200ã®ååãæã€BããªãŒããŒãã«çµã蟌ãã ã®ã§ããã®äžããNemoè¹é·ãèŠã€ããå¿
èŠããããŸãã 圌ã¯ã©ããã£ãŠãããããŸããïŒ ãã®ççž®ãªã¹ãã«é 次ã¹ãã£ã³ãé©çšããŸããïŒ
ãã ããªãŒããŒãå
ã®ããŒå€ãæ€çŽ¢ããããã«ãPostgresã¯ãã€ããªæ€çŽ¢ã¢ã«ãŽãªãºã ã®äœ¿çšã«åãæ¿ããŸãã ããªãŒããŒãã®50ïŒ
ã®äœçœ®ã«ããããŒãšãCaptain Nemoãã®æ¯èŒãéå§ããŸãã
Captain Nemoã¯ã¢ã«ãã¡ãããé ã§Breana Wittingã«åŸããããPostgresã¯75ïŒ
ã«ãžã£ã³ãããå¥ã®æ¯èŒãè¡ããŸãã
ä»åããã£ããã³ãã¢ã¯ã«ãŒãã£ã¹ãŠã«ãã«è¡ãã®ã§ãPostgresã¯å°ãæ»ã£ãŠããŸãã ããã«æ°åã®ã€ãã¬ãŒã·ã§ã³ã®åŸïŒPostgresã¯ç§ã®äŸã§Captain NemoãèŠã€ããããã«8忝èŒããŸããïŒãPostgresã¯æçµçã«ç§ãã¡ãæ¢ããŠãããã®ãèŠã€ããŸããã
Postgresãç¹å®ã®BããªãŒããŒãã§å€ãæ€çŽ¢ããæ¹æ³ã®è©³çްã«ã€ããŠã¯ã_bt_binsrch颿°ãåç
§ããŠãã ããã

_bt_binsrch
postgresql.orgã§è¡šç€º
å€ãã®ããšãåŠã¶å¿
èŠããããŸã
ãã®æçš¿ã§ã¯ãBããªãŒãããŒã¿ããŒã¹ã€ã³ããã¯ã¹ãPostgreså
éšã«é¢ãããã¹ãŠã®ãšããµã€ãã£ã³ã°ãªè©³çްã«ã€ããŠè©±ãã®ã«ååãªã¹ããŒã¹ããããŸãã...å€å
ãé¡åŸ®é¡ã§Postgresã®æ¬ãæžãå¿
èŠããããŸãã
BããªãŒã§ã®åææäœã®å¹ççãªããã¯ããŸãã¯
BããªãŒãåç
§ããå¥ã®ç§åŠè«æã§èªãããšãã§ããŸãã
- BããªãŒã®æ¿å
¥ïŒBããªãŒã¢ã«ãŽãªãºã ã®æãçŸããéšåã¯ãããªãŒã«æ°ããããŒã远å ããããšã§ãã ãããã¯é©åãªããªãŒããŒãã«ãœãŒããããé åºã§è¿œå ãããŸãããæ°ããããŒã®äœå°ããªãå Žåã¯ã©ããªããŸããïŒ ãã®å ŽåãPostgresã¯ããŒãã2ã€ã«åå²ãããããã®1ã€ã«æ°ããããŒãæ¿å
¥ããæ°ããåããŒããžã®ãã€ã³ã¿ãŒãšãšãã«ãããŒãåå²ããŒããã芪ããŒãã«è¿œå ããŸãã ãã¡ãããæ°ããããŒã远å ããããã«èŠªããŒããåå²ããå¿
èŠããããè€éãªååž°æäœã«ã€ãªããå¯èœæ§ããããŸãã
- BããªãŒããã®åé€ïŒéæŒç®ãè峿·±ããã®ã§ãã ããŒãããŒãããåé€ããããšãå¯èœã§ããã°ãPostgresã¯èŠªããŒãããããŒãåé€ããããšã§å
åŒããŒããçµåããŸãã ãã®æäœã¯ååž°çã«ãã§ããŸãã
- B-Link-TreeïŒLehmanãšYaoã®ç ç©¶ã§ã¯ãè€æ°ã®ã¹ã¬ãããåãB-Treeã䜿çšããå Žåã®åæå®è¡æ§ãšããããã³ã°ã«é¢ããŠèª¿æ»ãã驿°ã«ã€ããŠèª¬æããŠããŸãã å€ãã®ã¯ã©ã€ã¢ã³ããåãã€ã³ããã¯ã¹ãåæã«æ€çŽ¢ããã³å€æŽã§ãããããPostgresã®ã³ãŒããšã¢ã«ãŽãªãºã ã¯ãã«ãã¹ã¬ããã§ããå¿
èŠããããŸãã åBããªãŒããŒãããæ¬¡ã®åããŒãïŒãããããå³ç¢å°ãïŒã«å¥ã®ãã€ã³ã¿ãŒã远å ãããšã2çªç®ã®ã¹ã¬ãããã€ã³ããã¯ã¹å
šäœããããã¯ããã«ããŒããåå²ããå Žåã§ãã1ã€ã®ã¹ã¬ãããããªãŒãæ€çŽ¢ã§ããŸãã

æ°·å±±ã®èŠããªãéšåãæ¢æ€ããããšãæããªãã§ãã ãã
ã¢ãããã¯ã¹ææã¯ã人çãšãã£ãªã¢ãå±éºã«ããããŠããšããã©ããã®ãªãããŒãã©ã¹ãèŠã€ãããã£ããã³ãã¢ãšäžç·ã«çŽ æŽãããæ°Žäžã¢ããã³ãã£ãŒã®é·ãã·ãªãŒãºã«åå ããŸããã ç§ãã¡ãåãããšãããå¿
èŠããããŸããæ°Žã®äžã«é£ã³èŸŒãããšãæããªãã§ãã ãã-æ¯æ¥äœ¿çšããããŒã«ãèšèªãããã³ãã¯ãããžãŒã®å¥¥æ·±ãã«ã Postgresã«ã€ããŠå€ããç¥ãããšãã§ããŸãããå
éšããã©ã®ããã«æ©èœãããç¥ã£ãŠããŸããïŒ äžãèŠãŠã¿ããšãèªåãæ°Žäžã®åéºã«åºããšãã«æ¯ãè¿ãæéããããŸããã
ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã®èåŸã«ããæ
å ±åŠãè·å Žã§åŠã¶ããšã¯ãåãªã嚯楜ã§ã¯ãªããéçºè
ã®éçºããã»ã¹ã®éèŠãªèŠçŽ ã§ãã ãœãããŠã§ã¢éçºçšã®ããŒã«ã¯æ¯å¹Žæ¹è¯ãããŠãããWebãµã€ããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®äœæã¯ç°¡çŽ åãããŠããŸãããäŸåããŠããåºæ¬çãªã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ãèŠå€±ãããšã¯ãããŸããã ç§ãã¡ã¯çããªãŒãã³ãã€ãªã®ãããªå·šäººããããŠåœŒãã®çè«ã䜿çšããŠPostgresãäœæãããªãŒãã³ãœãŒã¹éçºè
ã®è©ã®äžã«ç«ã£ãŠããŸãã æ¥åžžçã«äœ¿çšããããŒã«ãåœããåã®ããã«åãåããªãã§ãã ãããããã€ã¹ã調ã¹ãŠãã ããã éçºè
ãšããŠè³¢ããªããæ°ä»ããªãã£ãã¢ã€ãã¢ãç¥èãèŠã€ããŸãã