é«åºŠãªã€ã³ããã¯ã¹æŠç¥ã§ããŒã¿ããŒã¹æ§èœãæå€§éã«ãã¯ãšãªæé©åãã€ã³ããã¯ã¹ã®çš®é¡ãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³åãã®ãã¹ããã©ã¯ãã£ã¹ã解説ããŸãã
ããŒã¿ããŒã¹ã¯ãšãªã®æé©åïŒã°ããŒãã«ããã©ãŒãã³ã¹ã極ããã€ã³ããã¯ã¹æŠç¥
仿¥ã®çžäºæ¥ç¶ãããããžã¿ã«ç°å¢ã«ãããŠãã¢ããªã±ãŒã·ã§ã³ã倧éžãã¿ã€ã ãŸãŒã³ãè¶ããŠãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸããäžãããŒã¿ããŒã¹ã®å¹çæ§ã¯æéèŠã§ããããã©ãŒãã³ã¹ã®äœãããŒã¿ããŒã¹ã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæãªããåçã®æå€±ã«ã€ãªãããããžãã¹éå¶ãèãã劚ããå¯èœæ§ããããŸããããŒã¿ããŒã¹ã®æé©åã«ã¯å€ãã®åŽé¢ããããŸãããæãåºæ¬çã§åœ±é¿åã®ããæŠç¥ã®äžã€ããããŒã¿ããŒã¹ã€ã³ããã¯ã¹ã®è³¢æãªå©çšã§ãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ã广çãªã€ã³ããã¯ã¹æŠç¥ãéããããŒã¿ããŒã¹ã¯ãšãªã®æé©åã«ã€ããŠæ·±ãæãäžããŠãããŸããã€ã³ããã¯ã¹ãšã¯äœããæ§ã ãªçš®é¡ãåæãããã®æŠç¥çãªé©çšã«ã€ããŠè°è«ãããã¹ããã©ã¯ãã£ã¹ãæŠèª¬ããäžè¬çãªèœãšã穎ã匷調ããŸããããããã¹ãŠããæµ·å€ã®èªè ã倿§ãªããŒã¿ããŒã¹ç°å¢ãžã®é¢é£æ§ã確ä¿ããããã«ãã°ããŒãã«ãªèŠç¹ãç¶æããªããé²ããŸãã
èŠéããããã¡ãªããã«ããã¯ïŒãªãããŒã¿ããŒã¹ã®ããã©ãŒãã³ã¹ã¯ã°ããŒãã«ã«éèŠãªã®ã
ã°ããŒãã«ãªã»ãŒã«ã€ãã³ãäžã®eã³ããŒã¹ãã©ãããã©ãŒã ãæ³åããŠã¿ãŠãã ãããç°ãªãåœã ããäœåãäœçŸäžãã®ãŠãŒã¶ãŒãåæã«ååãé²èЧããã«ãŒãã«è¿œå ããååŒãå®äºããŠããŸãããããã®ã¢ã¯ã·ã§ã³ã¯ãããããéåžžäžã€ä»¥äžã®ããŒã¿ããŒã¹ã¯ãšãªã«å€æãããŸãããããã®ã¯ãšãªãéå¹çã§ãããšãã·ã¹ãã ã¯ããã«å§åãããæ¬¡ã®ãããªäºæ ã«ã€ãªãããŸãïŒ
- é ãå¿çæéïŒ ãŠãŒã¶ãŒã¯èç«ãããé å»¶ãçµéšãããµã€ãé¢è±ã«ã€ãªãããŸãã
- ãªãœãŒã¹ã®æ¯æžïŒ ãµãŒããŒãéå°ãªCPUãã¡ã¢ãªãI/Oãæ¶è²»ããã€ã³ãã©ã³ã¹ããæŒãäžããŸãã
- éçšã®äžæïŒ ããããžã§ããã¬ããŒãäœæãåæã¯ãšãªã忢ããå¯èœæ§ããããŸãã
- ããžãã¹ãžã®æªåœ±é¿ïŒ 売äžã®æå€±ã顧客ã®äžæºããã©ã³ãè©äŸ¡ã®æ¯æã
ããŒã¿ããŒã¹ã€ã³ããã¯ã¹ãšã¯äœãïŒåºæ¬çãªçè§£
æ žå¿çã«èšãã°ãããŒã¿ããŒã¹ã€ã³ããã¯ã¹ã¯ãããŒã¿ããŒã¹ããŒãã«äžã®ããŒã¿æ€çŽ¢æäœã®é床ãåäžãããããŒã¿æ§é ã§ããæŠå¿µçã«ã¯ãæ¬ã®å·»æ«ã«ãã玢åŒã«äŒŒãŠããŸããç¹å®ã®ãããã¯ã«é¢ããæ å ±ãèŠã€ããããã«ãã¹ãŠã®ããŒãžãã¹ãã£ã³ãã代ããã«ã玢åŒãåç §ãããšããã®ãããã¯ãè°è«ãããŠããããŒãžçªå·ãæäŸãããé¢é£ããã³ã³ãã³ãã«çŽæ¥ãžã£ã³ãã§ããŸãã
ããŒã¿ããŒã¹ã§ã¯ãã€ã³ããã¯ã¹ããªãå ŽåãããŒã¿ããŒã¹ã·ã¹ãã ã¯èŠæ±ãããããŒã¿ãèŠã€ããããã«ããã«ããŒãã«ã¹ãã£ã³ããå®è¡ããå¿ èŠããããŸããããã¯ãã¯ãšãªã®åºæºã«äžèŽããè¡ãèŠã€ãããŸã§ãããŒãã«å ã®ãã¹ãŠã®è¡ãäžã€ãã€èªã¿åãããšãæå³ããŸãã倧ããªããŒãã«ã®å Žåãããã¯ä¿¡ããããªãã»ã©é ãããªãœãŒã¹ã倧éã«æ¶è²»ããå¯èœæ§ããããŸãã
ããããã€ã³ããã¯ã¹ã¯ãããŒãã«ã®äžã€ä»¥äžã®éžæãããåããã®ããŒã¿ã®ãœãŒãæžã¿ã³ããŒãšãå ã®ããŒãã«ã®å¯Ÿå¿ããè¡ãžã®ãã€ã³ã¿ãæ ŒçŽããŸããã€ã³ããã¯ã¹ãä»ããããåã«å¯ŸããŠã¯ãšãªãå®è¡ããããšãããŒã¿ããŒã¹ã¯ã€ã³ããã¯ã¹ã䜿çšããŠé¢é£ããè¡ãè¿ éã«èŠã€ããããšãã§ãããã«ããŒãã«ã¹ãã£ã³ã®å¿ èŠæ§ãåé¿ã§ããŸãã
ãã¬ãŒããªãïŒé床 vs. ãªãŒããŒããã
ã€ã³ããã¯ã¹ã¯èªã¿åãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããŸãããã³ã¹ãããªãããã§ã¯ãããŸããïŒ
- ã¹ãã¬ãŒãžå®¹éïŒ ã€ã³ããã¯ã¹ã¯è¿œå ã®ãã£ã¹ã¯å®¹éãæ¶è²»ããŸããéåžžã«å€§ããªããŒãã«ã«å€æ°ã®ã€ã³ããã¯ã¹ãããå Žåãããã¯ããªãã®éã«ãªãããšããããŸãã
- æžã蟌ã¿ãªãŒããŒãããïŒ ã€ã³ããã¯ã¹ä»ãã®åã®ããŒã¿ãæ¿å ¥ãæŽæ°ããŸãã¯åé€ããããã³ã«ã察å¿ããã€ã³ããã¯ã¹ãæŽæ°ããå¿ èŠããããŸããããã«ããæžãèŸŒã¿æäœã«ãªãŒããŒããããå ããã`INSERT`ã`UPDATE`ã`DELETE`ã¯ãšãªãé ããªãå¯èœæ§ããããŸãã
- ã¡ã³ããã³ã¹ïŒ ã€ã³ããã¯ã¹ã¯æéãšãšãã«æçåããããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸããåæ§ç¯ãåç·šæãªã©ã®å®æçãªã¡ã³ããã³ã¹ãå¿ èŠã§ãããã¯ãšãªãªããã£ãã€ã¶ã®ããã«ã€ã³ããã¯ã¹ã«é¢ããçµ±èšãææ°ã®ç¶æ ã«ä¿ã€å¿ èŠããããŸãã
äž»èŠãªã€ã³ããã¯ã¹ã¿ã€ãã®è§£èª¬
ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ç®¡çã·ã¹ãã ïŒRDBMSïŒã¯ãããããç°ãªãã·ããªãªã«æé©åãããæ§ã ãªçš®é¡ã®ã€ã³ããã¯ã¹ãæäŸããŸãããããã®ã¿ã€ããçè§£ããããšã¯ãæŠç¥çãªã€ã³ããã¯ã¹é 眮ã®ããã«äžå¯æ¬ ã§ãã
1. ã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹
ã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã¯ãããŒãã«å ã®ããŒã¿ã®ç©ççãªæ ŒçŽé åºã決å®ããŸããããŒã¿è¡èªäœãã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã®é åºã§æ ŒçŽããããããããŒãã«ã¯ã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã1ã€ããæã€ããšãã§ããŸãããããã¯ãåèªãç©ççã«ã¢ã«ãã¡ãããé ã«äžŠã¹ãããŠããèŸæžã®ãããªãã®ã§ããåèªã調ã¹ããšãã¯ããã®ç©ççãªå Žæã«çŽæ¥ç§»åããŸãã
- ä»çµã¿ïŒ ã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã®ãªãŒãã¬ãã«ã«ã¯ãããŒãã«ã®å®éã®ããŒã¿è¡ãå«ãŸããŸãã
- å©ç¹ïŒ ç¯å²ã¯ãšãªïŒäŸïŒã1æãã3æãŸã§ã®ãã¹ãŠã®æ³šæãïŒã«åºã¥ãããŒã¿æ€çŽ¢ãéåžžã«é«éã§ãããŒã¿ããã§ã«ãœãŒããããŠãã£ã¹ã¯äžã§é£æ¥ããŠãããããè€æ°ã®è¡ãååŸããã¯ãšãªã«éåžžã«å¹ççã§ãã
- ãŠãŒã¹ã±ãŒã¹ïŒ äž»ããŒã¯äžæã§ããã`WHERE`å¥ã`JOIN`å¥ã§é »ç¹ã«äœ¿çšããããããéåžžã¯ããŒãã«ã®äž»ããŒã«äœæãããŸããçµæã»ããå šäœããœãŒãããå¿ èŠããã`ORDER BY`å¥ã§äœ¿çšãããåã«ãæé©ã§ãã
- èæ ®äºé ïŒ ã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã¯ããŒã¿ã®ç©ççãªæ ŒçŽã決å®ãããããé©åãªã€ã³ããã¯ã¹ãéžæããããšãéèŠã§ããã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ããŒãé »ç¹ã«æŽæ°ããããšãããŒãžåå²ãæçåãåŒãèµ·ãããããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
2. éã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹
éã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã¯ãã€ã³ããã¯ã¹ä»ãã®åãšå®éã®ããŒã¿è¡ãžã®ãã€ã³ã¿ãå«ãå¥ã®ããŒã¿æ§é ã§ããããã¯ãæ¬ã®äŒçµ±çãªçŽ¢åŒã®ãããªãã®ã§ããçšèªãšããŒãžçªå·ããªã¹ããããŠããŸãããå®éã®ã³ã³ãã³ãïŒããŒãžïŒã¯å¥ã®å Žæã«ãããŸããããŒãã«ã¯è€æ°ã®éã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ãæã€ããšãã§ããŸãã
- ä»çµã¿ïŒ éã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã®ãªãŒãã¬ãã«ã«ã¯ãã€ã³ããã¯ã¹ä»ãã®ããŒå€ãšã察å¿ããããŒã¿è¡ãžã®è¡ãã±ãŒã¿ïŒç©ççãªè¡IDãŸãã¯ã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ããŒïŒãå«ãŸããŸãã
- å©ç¹ïŒ `WHERE`å¥ãã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ããŒä»¥å€ã®åã䜿çšãã`SELECT`ã¹ããŒãã¡ã³ããé«éåããã®ã«é©ããŠããŸããäž»ããŒä»¥å€ã®åã«å¯Ÿããäžææ§å¶çŽã«åœ¹ç«ã¡ãŸãã
- ãŠãŒã¹ã±ãŒã¹ïŒ é »ç¹ã«æ€çŽ¢ãããåãå€éšããŒåïŒJOINãé«éåããããïŒã`GROUP BY`å¥ã§äœ¿çšãããåã
- èæ ®äºé ïŒ åéã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã¯ãæžãèŸŒã¿æäœã«ãªãŒããŒãããã远å ãããã£ã¹ã¯å®¹éãæ¶è²»ããŸããã¯ãšãªãéã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã䜿çšããå Žåãã€ã³ããã¯ã¹ã«å«ãŸããŠããªãä»ã®åãååŸããããã«ãããã¯ããŒã¯ã«ãã¯ã¢ããããŸãã¯ãããŒã«ãã¯ã¢ããããå®è¡ããããšãå€ããããã«ã¯è¿œå ã®I/Oæäœãå«ãŸããå ŽåããããŸãã
3. B-Treeã€ã³ããã¯ã¹ (B+-Tree)
B-TreeïŒå ·äœçã«ã¯B+-TreeïŒã¯ãSQL ServerãMySQLïŒInnoDBïŒãPostgreSQLãOracleãªã©ãçŸä»£ã®RDBMSã§æãäžè¬çãã€åºã䜿çšãããŠããã€ã³ããã¯ã¹æ§é ã§ããã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ãšéã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã®äž¡æ¹ãããã°ãã°B-Treeæ§é ãå®è£ ããŠããŸãã
- ä»çµã¿ïŒ ãœãŒããããããŒã¿ãç¶æããå¯Ÿæ°æéã§æ€çŽ¢ãã·ãŒã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ãæ¿å ¥ãåé€ãå¯èœã«ããèªå·±å¹³è¡¡åã®æšæ§é ããŒã¿æ§é ã§ããããã¯ãããŒã¿ãå¢å ããŠããã¬ã³ãŒããèŠã€ããã®ã«ãããæéãéåžžã«ãã£ãããšããå¢å ããªãããšãæå³ããŸãã
- æ§é ïŒ ã«ãŒãããŒããå éšããŒãããªãŒãããŒãã§æ§æãããŸãããã¹ãŠã®ããŒã¿ãã€ã³ã¿ã¯ãªãŒãããŒãã«æ ŒçŽããããªãŒãããŒãã¯å¹ççãªç¯å²ã¹ãã£ã³ãå¯èœã«ããããã«çžäºã«ãªã³ã¯ãããŠããŸãã
- å©ç¹ïŒ ç¯å²ã¯ãšãªïŒäŸïŒ`WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31'`ïŒãç䟡æ€çŽ¢ïŒ`WHERE customer_id = 123`ïŒããœãŒãã«åªããŠããŸãã
- é©çšæ§ïŒ ãã®æ±çšæ§ãããã»ãšãã©ã®ã€ã³ããã¯ã¹äœæããŒãºã«å¯Ÿããããã©ã«ãã®éžæè¢ãšãªã£ãŠããŸãã
4. ããã·ã¥ã€ã³ããã¯ã¹
ããã·ã¥ã€ã³ããã¯ã¹ã¯ãããã·ã¥ããŒãã«æ§é ã«åºã¥ããŠããŸããã€ã³ããã¯ã¹ããŒã®ããã·ã¥ãšããŒã¿ãžã®ãã€ã³ã¿ãæ ŒçŽããŸããB-Treeãšã¯ç°ãªãããœãŒããããŠããŸããã
- ä»çµã¿ïŒ å€ãæ€çŽ¢ãããšãã·ã¹ãã ã¯ãã®å€ãããã·ã¥åãããã€ã³ã¿ãæ ŒçŽãããŠããå Žæã«çŽæ¥ãžã£ã³ãããŸãã
- å©ç¹ïŒ ããŒã¿ãžã®çŽæ¥ã¢ã¯ã»ã¹ãæäŸãããããç䟡æ€çŽ¢ïŒ`WHERE user_email = 'john.doe@example.com'`ïŒãéåžžã«é«éã§ãã
- å¶éäºé ïŒ ç¯å²ã¯ãšãªã`ORDER BY`å¥ãéšåããŒæ€çŽ¢ã«ã¯äœ¿çšã§ããŸããããŸãããããã·ã¥è¡çªãã®åœ±é¿ãåãããããããŸãåŠçãããªããšããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã
- ãŠãŒã¹ã±ãŒã¹ïŒ ç䟡æ€çŽ¢ã®ã¿ãå®è¡ããããäžæãŸãã¯ã»ãŒäžæã®å€ãæã€åã«æé©ã§ããäžéšã®RDBMSïŒMySQLã®MEMORYã¹ãã¬ãŒãžãšã³ãžã³ãç¹å®ã®PostgreSQLæ¡åŒµæ©èœãªã©ïŒã¯ããã·ã¥ã€ã³ããã¯ã¹ãæäŸããŸããããã®å¶éã®ããã«æ±çšçãªã€ã³ããã¯ã¹äœæã«ã¯B-Treeãããã¯ããã«äžè¬çã§ã¯ãããŸããã
5. ããããããã€ã³ããã¯ã¹
ããããããã€ã³ããã¯ã¹ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã·ã¹ãã ïŒOLTPïŒãããããŒã¿ãŠã§ã¢ããŠãžã³ã°ç°å¢ïŒOLAPïŒã§ããèŠãããç¹æ®ãªã€ã³ããã¯ã¹ã§ããã«ãŒãã£ããªãã£ãäœãïŒåå¥ã®å€ãå°ãªãïŒåãäŸãã°ãæ§å¥ãããã¹ããŒã¿ã¹ãïŒäŸïŒãã¢ã¯ãã£ããããéã¢ã¯ãã£ããïŒããŸãã¯ãå°åãã«å¯ŸããŠéåžžã«å¹æçã§ãã
- ä»çµã¿ïŒ ã€ã³ããã¯ã¹ä»ãã®åã®ååå¥å€ã«å¯ŸããŠãããããããïŒ0ãš1ã®ãããåïŒãäœæãããŸããåãããã¯ããŒãã«å ã®è¡ã«å¯Ÿå¿ããã1ãã¯ãã®è¡ãç¹å®ã®å€ãæã¡ãã0ãã¯æããªãããšã瀺ããŸããè€æ°ã®äœã«ãŒãã£ããªãã£åã«å¯Ÿãã`AND`ãŸãã¯`OR`æ¡ä»¶ãå«ãã¯ãšãªã¯ããããã®ããããããäžã§ãããåäœã®æäœãå®è¡ããããšã«ãã£ãŠéåžžã«è¿ éã«è§£æ±ºã§ããŸãã
- å©ç¹ïŒ äœã«ãŒãã£ããªãã£ã®ããŒã¿ã«å¯ŸããŠéåžžã«ã³ã³ãã¯ãã§ããè€æ°ã®æ¡ä»¶ãçµã¿åãããè€éãª`WHERE`å¥ïŒ`WHERE status = 'Active' AND region = 'Europe'`ïŒã«éåžžã«å¹ççã§ãã
- å¶éäºé ïŒ é«ã«ãŒãã£ããªãã£ã®åã«ã¯é©ããŠããŸãããæŽæ°ã«ã¯å€§ããªããããããã®å€æŽãå¿ èŠãšãªããããã¯ã®åé¡ãåŒãèµ·ãããããé«äžŠè¡æ§ã®OLTPç°å¢ã§ã¯ããã©ãŒãã³ã¹ãæªãã§ãã
- ãŠãŒã¹ã±ãŒã¹ïŒ ããŒã¿ãŠã§ã¢ããŠã¹ãåæããŒã¿ããŒã¹ãæææ±ºå®æ¯æŽã·ã¹ãã ïŒäŸïŒOracleãäžéšã®PostgreSQLæ¡åŒµæ©èœïŒã
6. ç¹æ®ãªã€ã³ããã¯ã¹ã¿ã€ã
äž»èŠãªã¿ã€ã以å€ã«ããããã€ãã®ç¹æ®ãªã€ã³ããã¯ã¹ãç¹å®ã®æé©åæ©äŒãæäŸããŸãïŒ
-
è€åã€ã³ããã¯ã¹ïŒ
- å®çŸ©ïŒ ããŒãã«ã®2ã€ä»¥äžã®åã«äœæãããã€ã³ããã¯ã¹ã
- ä»çµã¿ïŒ ã€ã³ããã¯ã¹ãšã³ããªã¯ãæåã®åãæ¬¡ã«2çªç®ã®åããšããé ã«ãœãŒããããŸãã
- å©ç¹ïŒ åã®çµã¿åããã§ãã£ã«ã¿ãªã³ã°ããã¯ãšãªããã€ã³ããã¯ã¹ã®å·Šç«¯ã®åã«åºã¥ããŠããŒã¿ãååŸããã¯ãšãªã«å¹ççã§ããã巊端ãã¬ãã£ãã¯ã¹ã«ãŒã«ããããã§éèŠã§ãïŒ(A, B, C)ã®ã€ã³ããã¯ã¹ã¯ã(A)ã(A, B)ããŸãã¯(A, B, C)ã®ã¯ãšãªã«äœ¿çšã§ããŸããã(B, C)ã(C)ã ãã§ã¯äœ¿çšã§ããŸããã
- ãŠãŒã¹ã±ãŒã¹ïŒ é »ç¹ã«äœ¿çšãããæ€çŽ¢ã®çµã¿åãããäŸïŒé¡§å®¢æ€çŽ¢çšã®`(last_name, first_name)`ã®ã€ã³ããã¯ã¹ãã¯ãšãªã«å¿ èŠãªãã¹ãŠã®åãã€ã³ããã¯ã¹ã«ååšããå Žåããã«ããŒãªã³ã°ã€ã³ããã¯ã¹ããšããŠãæ©èœããŸãã
-
äžæã€ã³ããã¯ã¹ïŒ
- å®çŸ©ïŒ ã€ã³ããã¯ã¹ä»ãã®åã«äžææ§ã匷å¶ããã€ã³ããã¯ã¹ãéè€ããå€ãæ¿å ¥ããããšãããšãããŒã¿ããŒã¹ã¯ãšã©ãŒãçºçãããŸãã
- ä»çµã¿ïŒ éåžžã¯B-Treeã€ã³ããã¯ã¹ã«è¿œå ã®äžææ§å¶çŽãã§ãã¯ãä»ãããã®ã§ãã
- å©ç¹ïŒ ããŒã¿ã®æŽåæ§ãä¿èšŒããããŒã¿ããŒã¹ãæåã®äžèŽãèŠã€ããåŸã«æ€çŽ¢ã忢ã§ãããããæ€çŽ¢ãå€§å¹ ã«é«éåããããšãå€ãã§ãã
- ãŠãŒã¹ã±ãŒã¹ïŒ `PRIMARY KEY`ããã³`UNIQUE`å¶çŽã«å¯ŸããŠèªåçã«äœæãããŸããããŒã¿å質ãç¶æããããã«äžå¯æ¬ ã§ãã
-
ãã£ã«ã¿åã€ã³ããã¯ã¹/éšåã€ã³ããã¯ã¹ïŒ
- å®çŸ©ïŒ `WHERE`å¥ã«ãã£ãŠå®çŸ©ããããããŒãã«ããã®äžéšã®è¡ã®ã¿ãå«ãã€ã³ããã¯ã¹ã
- ä»çµã¿ïŒ ãã£ã«ã¿æ¡ä»¶ãæºããè¡ã®ã¿ãã€ã³ããã¯ã¹ã«å«ãŸããŸãã
- å©ç¹ïŒ ç¹ã«ãããäžéšã®è¡ã®ã¿ãé »ç¹ã«ç §äŒããã倧ããªããŒãã«ïŒäŸïŒ`WHERE status = 'Active'`ïŒã«ãããŠãã€ã³ããã¯ã¹ã®ãµã€ãºãšã¡ã³ããã³ã¹ã®ãªãŒããŒããããåæžããŸãã
- ãŠãŒã¹ã±ãŒã¹ïŒ SQL ServerãPostgreSQLã§ãç¹å®ã®ããŒã¿ãµãã»ããã«å¯Ÿããã¯ãšãªãæé©åããããã«äžè¬çã§ãã
-
å
šææ€çŽ¢ã€ã³ããã¯ã¹ïŒ
- å®çŸ©ïŒ 倧éã®ããã¹ããããã¯å ã§ã®å¹ççãªããŒã¯ãŒãæ€çŽ¢ã®ããã«èšèšãããç¹æ®ãªã€ã³ããã¯ã¹ã
- ä»çµã¿ïŒ ããã¹ããåèªã«åè§£ããäžè¬çãªåèªïŒã¹ãããã¯ãŒãïŒãç¡èŠããèšèªçãªãããã³ã°ãå¯èœã«ããŸãïŒäŸïŒãrunããæ€çŽ¢ãããšãrunningãããranããèŠã€ããïŒã
- å©ç¹ïŒ ããã¹ãæ€çŽ¢ã«ãããŠ`LIKE '%text%'`ãããã¯ããã«åªããŠããŸãã
- ãŠãŒã¹ã±ãŒã¹ïŒ æ€çŽ¢ãšã³ãžã³ãææžç®¡çã·ã¹ãã ãã³ã³ãã³ããã©ãããã©ãŒã ã
ãã€ããªãã€ã³ããã¯ã¹ã䜿çšããã®ãïŒæŠç¥çãªé 眮
ã€ã³ããã¯ã¹ãäœæããæ±ºå®ã¯æ£æçãªãã®ã§ã¯ãããŸãããã¯ãšãªãã¿ãŒã³ãããŒã¿ç¹æ§ãã·ã¹ãã ã¯ãŒã¯ããŒããæ éã«èæ ®ããå¿ èŠããããŸãã
1. èªã¿åã察æžãèŸŒã¿æ¯çãé«ãããŒãã«
ã€ã³ããã¯ã¹ã¯äž»ã«èªã¿åãæäœïŒ`SELECT`ïŒã«æçã§ããããŒãã«ã`INSERT`ã`UPDATE`ããŸãã¯`DELETE`æäœãããã¯ããã«å€ãã®`SELECT`ã¯ãšãªãçµéšããå Žåãã€ã³ããã¯ã¹äœæã®åŒ·åãªåè£ã§ããäŸãã°ãeã³ããŒã¹ãµã€ãã®`Products`ããŒãã«ã¯æ°ãåããªãã»ã©èªã¿åãããŸãããæŽæ°ã¯æ¯èŒçãŸãã§ãã
2. `WHERE`å¥ã§é »ç¹ã«äœ¿çšãããå
ããŒã¿ããã£ã«ã¿ãªã³ã°ããããã«äœ¿çšãããåã¯ãã€ã³ããã¯ã¹ã®ææååè£ã§ããããã«ãããããŒã¿ããŒã¹ã¯ããŒãã«å šäœãã¹ãã£ã³ããããšãªããçµæã»ãããè¿ éã«çµã蟌ãããšãã§ããŸããäžè¬çãªäŸã«ã¯ã`user_id`ã`product_category`ã`order_status`ã`country_code`ãªã©ããããŸãã
3. `JOIN`æ¡ä»¶ã®å
å¹ççãªJOINã¯ãè€æ°ã®ããŒãã«ã«ãŸãããè€éãªã¯ãšãªã«ãšã£ãŠéèŠã§ãã`JOIN`ã¹ããŒãã¡ã³ãã®`ON`å¥ã§äœ¿çšãããåïŒç¹ã«å€éšããŒïŒã«ã€ã³ããã¯ã¹ãä»ãããšãããŒãã«éã§é¢é£ããŒã¿ããªã³ã¯ããããã»ã¹ãåçã«é«éåã§ããŸããäŸãã°ã`Orders`ããŒãã«ãš`Customers`ããŒãã«ã`customer_id`ã§JOINããå Žåãäž¡æ¹ã®ããŒãã«ã®`customer_id`ã«ã€ã³ããã¯ã¹ãä»ããããšã§å€§ããªã¡ãªãããåŸãããŸãã
4. `ORDER BY`å¥ããã³`GROUP BY`å¥ã®å
ããŒã¿ããœãŒãïŒ`ORDER BY`ïŒãŸãã¯éçŽïŒ`GROUP BY`ïŒããå ŽåãããŒã¿ããŒã¹ã¯é«äŸ¡ãªãœãŒãæäœãå®è¡ããå¿ èŠããããããããŸãããé¢é£ããåã«ã€ã³ããã¯ã¹ïŒç¹ã«å¥ã®åã®é åºã«äžèŽããè€åã€ã³ããã¯ã¹ïŒãä»ããããšã§ãããŒã¿ããŒã¹ã¯ãã§ã«ç®çã®é åºã§ããŒã¿ãååŸã§ããæç€ºçãªãœãŒãã®å¿ èŠããªããªããŸãã
5. ã«ãŒãã£ããªãã£ãé«ãå
ã«ãŒãã£ããªãã£ãšã¯ãè¡æ°ã«å¯Ÿããåå ã®åå¥å€ã®æ°ãæããŸããã€ã³ããã¯ã¹ã¯ãã«ãŒãã£ããªãã£ãé«ãïŒåå¥å€ãå€ãïŒåãäŸãã°`email_address`ã`customer_id`ã`unique_product_code`ãªã©ã§æã广çã§ããã«ãŒãã£ããªãã£ãé«ããšããããšã¯ãã€ã³ããã¯ã¹ãæ€çŽ¢ç¯å²ãããã€ãã®ç¹å®ã®è¡ã«è¿ éã«çµã蟌ããããšãæå³ããŸãã
éã«ãã«ãŒãã£ããªãã£ãäœãåïŒäŸïŒ`gender`ã`is_active`ïŒãåç¬ã§ã€ã³ããã¯ã¹åããããšã¯ãã€ã³ããã¯ã¹ãäŸç¶ãšããŠããŒãã«ã®è¡ã®å€§éšåãæãå¯èœæ§ãããããã广ãäœãããšãå€ãã§ãããã®ãããªå Žåããããã®åã¯ãããã«ãŒãã£ããªãã£ã®é«ãåãæã€è€åã€ã³ããã¯ã¹ã®äžéšãšããŠå«ããæ¹ãè¯ãã§ãã
6. å€éšããŒ
äžéšã®ORMãããŒã¿ããŒã¹ã·ã¹ãã ã§ã¯æé»çã«ã€ã³ããã¯ã¹ãä»ããããããšãå€ãã§ãããå€éšããŒåã«æç€ºçã«ã€ã³ããã¯ã¹ãä»ããããšã¯ãåºãæ¡çšãããŠãããã¹ããã©ã¯ãã£ã¹ã§ããããã¯ãJOINã®ããã©ãŒãã³ã¹ã ãã§ãªãã芪ããŒãã«ã§ã®`INSERT`ã`UPDATE`ã`DELETE`æäœäžã®åç §æŽåæ§ãã§ãã¯ãé«éåããããã§ããããŸãã
7. ã«ããŒãªã³ã°ã€ã³ããã¯ã¹
ã«ããŒãªã³ã°ã€ã³ããã¯ã¹ã¯ãç¹å®ã®ã¯ãšãªã«å¿ èŠãªãã¹ãŠã®åããã®å®çŸ©ã«ïŒããŒåãšããŠããŸãã¯SQL Serverã®`INCLUDE`åãMySQLã®`STORING`ãšããŠïŒå«ãéã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã§ããã¯ãšãªãããŒãã«ã®å®éã®ããŒã¿è¡ã«ã¢ã¯ã»ã¹ããããšãªããã€ã³ããã¯ã¹èªäœãèªãã ãã§å®å šã«æºããããå Žåãããã¯ãã€ã³ããã¯ã¹ãªã³ãªãŒã¹ãã£ã³ããŸãã¯ãã«ããŒãªã³ã°ã€ã³ããã¯ã¹ã¹ãã£ã³ããšåŒã°ããŸããããã«ããããã£ã¹ã¯èªã¿åããããå°ããªã€ã³ããã¯ã¹æ§é ã«éå®ããããããI/Oæäœãåçã«åæžãããŸãã
äŸãã°ã`SELECT customer_name, customer_email FROM Customers WHERE customer_id = 123;`ãé »ç¹ã«ã¯ãšãªãã`customer_id`ã«`customer_name`ãš`customer_email`ã*å«ã*ã€ã³ããã¯ã¹ãããå ŽåãããŒã¿ããŒã¹ã¯ã¡ã€ã³ã®`Customers`ããŒãã«ã«äžåè§Šããå¿ èŠããããŸããã
ã€ã³ããã¯ã¹æŠç¥ã®ãã¹ããã©ã¯ãã£ã¹ïŒçè«ããå®è£ ãŸã§
广çãªã€ã³ããã¯ã¹æŠç¥ãå®è£ ããã«ã¯ãã€ã³ããã¯ã¹ãäœã§ããããç¥ãã ãã§ã¯äžååã§ããåæãå±éãç¶ç¶çãªã¡ã³ããã³ã¹ãžã®äœç³»çãªã¢ãããŒããæ±ããããŸãã
1. ã¯ãŒã¯ããŒãã®çè§£ïŒOLTP vs. OLAP
æåã®ã¹ãããã¯ãããŒã¿ããŒã¹ã®ã¯ãŒã¯ããŒããåé¡ããããšã§ããããã¯ãå°åã«ãã£ãŠç°ãªã䜿çšãã¿ãŒã³ãæã€å¯èœæ§ã®ããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãã
- OLTP (Online Transaction Processing): 倧éã®å°èŠæš¡ãªã¢ãããã¯ãã©ã³ã¶ã¯ã·ã§ã³ïŒæ¿å ¥ãæŽæ°ãåé€ãåäžè¡æ€çŽ¢ïŒãç¹åŸŽã§ããäŸïŒEã³ããŒã¹ã®ãã§ãã¯ã¢ãŠããéè¡ååŒããŠãŒã¶ãŒãã°ã€ã³ãOLTPã§ã¯ãã€ã³ããã¯ã¹äœæã¯èªã¿åãããã©ãŒãã³ã¹ãšæå°éã®æžã蟌ã¿ãªãŒããŒãããã®ãã©ã³ã¹ãåãå¿ èŠããããŸããäž»ããŒãå€éšããŒãé »ç¹ã«ã¯ãšãªãããåã®B-Treeã€ã³ããã¯ã¹ãæãéèŠã§ãã
- OLAP (Online Analytical Processing): å€§èŠæš¡ãªããŒã¿ã»ããã«å¯Ÿããè€éã§é·æéã®ã¯ãšãªãç¹åŸŽã§ãã¬ããŒãäœæãããžãã¹ã€ã³ããªãžã§ã³ã¹ã®ããã«å€ãã®ããŒãã«ã«ãããéèšãJOINã䌎ããŸããäŸïŒææ¬¡å£²äžã¬ããŒãããã¬ã³ãåæãããŒã¿ãã€ãã³ã°ãOLAPã§ã¯ãããããããã€ã³ããã¯ã¹ïŒãµããŒãããé©çšå¯èœãªå ŽåïŒãé«åºŠã«éæ£èŠåãããããŒãã«ãå€§èŠæš¡ãªè€åã€ã³ããã¯ã¹ãäžè¬çã§ããæžã蟌ã¿ããã©ãŒãã³ã¹ã¯ããŸãæžå¿µãããŸããã
å€ãã®çŸä»£çãªã¢ããªã±ãŒã·ã§ã³ãç¹ã«ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãµãŒãã¹ãæäŸãããã®ã¯ãã€ããªããã§ããããã©ã³ã¶ã¯ã·ã§ã³ã®é床ãšåæçãªæŽå¯ã®äž¡æ¹ã«å¯Ÿå¿ããæ éãªã€ã³ããã¯ã¹äœæãå¿ èŠã§ãã
2. ã¯ãšãªãã©ã³ã®åæ (EXPLAIN/ANALYZE)
ã¯ãšãªããã©ãŒãã³ã¹ãçè§£ããæé©åããããã®æã匷åãªããŒã«ã¯ãã¯ãšãªå®è¡èšç»ã§ãïŒMySQL/PostgreSQLã§ã¯`EXPLAIN`ãSQL Server/Oracleã§ã¯`SET SHOWPLAN_ALL ON` / `EXPLAIN PLAN`ã§ã¢ã¯ã»ã¹ãããããšãå€ãïŒããã®ãã©ã³ã¯ãããŒã¿ããŒã¹ãšã³ãžã³ãã¯ãšãªãã©ã®ããã«å®è¡ããã€ãããã瀺ããŸãïŒã©ã®ã€ã³ããã¯ã¹ã䜿çšãããããã«ããŒãã«ã¹ãã£ã³ããœãŒãããŸãã¯äžæããŒãã«ã®äœæãè¡ããã©ãããªã©ã§ãã
ã¯ãšãªãã©ã³ã§æ¢ãã¹ãããšïŒ
- ããŒãã«ã¹ãã£ã³ïŒ ããŒã¿ããŒã¹ããã¹ãŠã®è¡ãèªã¿åã£ãŠããå åãã€ã³ããã¯ã¹ãæ¬ èœããŠãããã䜿çšãããŠããªãããšãå€ãã§ãã
- ã€ã³ããã¯ã¹ã¹ãã£ã³ïŒ ããŒã¿ããŒã¹ãã€ã³ããã¯ã¹ã®å€§éšåãèªã¿åã£ãŠããŸããããŒãã«ã¹ãã£ã³ããã¯è¯ãã§ããããã€ã³ããã¯ã¹ã·ãŒã¯ããå¯èœãªå ŽåããããŸãã
- ã€ã³ããã¯ã¹ã·ãŒã¯ïŒ æãå¹ççãªã€ã³ããã¯ã¹æäœã§ãããŒã¿ããŒã¹ãã€ã³ããã¯ã¹ã䜿çšããŠç¹å®ã®è¡ã«çŽæ¥ãžã£ã³ãããŸãããããç®æãã¹ããã®ã§ãã
- ãœãŒãæäœïŒ ã¯ãšãªãã©ã³ã«æç€ºçãªãœãŒãæäœïŒäŸïŒMySQLã®`Using filesort`ãSQL Serverã®`Sort`ãªãã¬ãŒã¿ïŒã衚瀺ãããå ŽåãããŒã¿ããŒã¹ãååŸåŸã«ããŒã¿ãåãœãŒãããŠããããšãæå³ããŸãã`ORDER BY`å¥ã`GROUP BY`å¥ã«äžèŽããã€ã³ããã¯ã¹ãããã°ããããæé€ã§ããããšãå€ãã§ãã
- äžæããŒãã«ïŒ äžæããŒãã«ã®äœæã¯ããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªãå¯èœæ§ããããããè¯ãã€ã³ããã¯ã¹äœæã§æé©åã§ããè€éãªæäœã瀺ããŠããŸãã
3. éå°ãªã€ã³ããã¯ã¹äœæãé¿ãã
ã€ã³ããã¯ã¹ã¯èªã¿åããé«éåããŸãããåã€ã³ããã¯ã¹ã¯æžãèŸŒã¿æäœïŒ`INSERT`ã`UPDATE`ã`DELETE`ïŒã«ãªãŒããŒãããã远å ãããã£ã¹ã¯å®¹éãæ¶è²»ããŸããã€ã³ããã¯ã¹ãå€ãäœãããããšã次ã®ããã«ãªããŸãïŒ
- æžã蟌ã¿ããã©ãŒãã³ã¹ã®äœäžïŒ ã€ã³ããã¯ã¹ä»ãåãžã®ãã¹ãŠã®å€æŽã¯ãé¢é£ãããã¹ãŠã®ã€ã³ããã¯ã¹ã®æŽæ°ãå¿ èŠãšããŸãã
- ã¹ãã¬ãŒãžèŠä»¶ã®å¢å ïŒ ã€ã³ããã¯ã¹ãå€ãã»ã©ããã£ã¹ã¯å®¹éãå€ããªããŸãã
- ã¯ãšãªãªããã£ãã€ã¶ã®æ··ä¹±ïŒ ã€ã³ããã¯ã¹ãå€ããããšãã¯ãšãªãªããã£ãã€ã¶ãæé©ãªãã©ã³ãéžæããã®ãé£ãããªããããã©ãŒãã³ã¹ãäœäžããããšãããããŸãã
é »ç¹ã«å®è¡ãããã圱é¿ã®å€§ããã¯ãšãªã®ããã©ãŒãã³ã¹ãæããã«åäžãããå Žåã«ã®ã¿ã€ã³ããã¯ã¹ãäœæããããšã«éäžããŠãã ããããã£ãã«ããããã¯å šãã¯ãšãªãããªãåã«ã€ã³ããã¯ã¹ãä»ããªãã®ãè¯ãçµéšåã§ãã
4. ã€ã³ããã¯ã¹ããªãŒã³ãã€é©åã«ä¿ã€
ã€ã³ããã¯ã¹ã«å¿ èŠãªåã®ã¿ãå«ããŠãã ãããããçãã€ã³ããã¯ã¹ïŒåãå°ãªãïŒã¯ãäžè¬çã«ã¡ã³ããã³ã¹ãéããã¹ãã¬ãŒãžæ¶è²»ãå°ãªããªããŸãããã ããç¹å®ã®ã¯ãšãªã«å¯Ÿããã«ããŒãªã³ã°ã€ã³ããã¯ã¹ã®åãå¿ããªãã§ãã ãããã¯ãšãªãã€ã³ããã¯ã¹ä»ãã®åãšãšãã«è¿œå ã®åãé »ç¹ã«ååŸããå ŽåãRDBMSããµããŒãããŠããã°ããããã®åãéã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã®`INCLUDE`ïŒãŸãã¯`STORING`ïŒåãšããŠå«ããããšãæ€èšããŠãã ããã
5. è€åã€ã³ããã¯ã¹ã§é©åãªåãšé åºãéžæãã
- ã«ãŒãã£ããªãã£ïŒ åäžåã®ã€ã³ããã¯ã¹ã§ã¯ãã«ãŒãã£ããªãã£ãé«ãåãåªå ããŸãã
- 䜿çšé »åºŠïŒ `WHERE`ã`JOIN`ã`ORDER BY`ã`GROUP BY`å¥ã§æãé »ç¹ã«äœ¿çšãããåã«ã€ã³ããã¯ã¹ãä»ããŸãã
- ããŒã¿åïŒ æŽæ°åã¯ãäžè¬çã«æååãã©ãŒãžãªããžã§ã¯ãåãããã€ã³ããã¯ã¹äœæãšæ€çŽ¢ãé«éã§ãã
- è€åã€ã³ããã¯ã¹ã®å·Šç«¯ãã¬ãã£ãã¯ã¹ã«ãŒã«ïŒ è€åã€ã³ããã¯ã¹ïŒäŸïŒ`(A, B, C)`ïŒãäœæããå Žåãæãéžææ§ã®é«ãåããŸãã¯`WHERE`å¥ã§æãé »ç¹ã«äœ¿çšãããåãæåã«é 眮ããŸããããã«ãããã€ã³ããã¯ã¹ã¯`A`ã`A`ãš`B`ããŸãã¯`A`ã`B`ã`C`ã§ãã£ã«ã¿ãªã³ã°ããã¯ãšãªã«äœ¿çšã§ããŸãã`B`ãŸãã¯`C`ã®ã¿ã§ãã£ã«ã¿ãªã³ã°ããã¯ãšãªã«ã¯äœ¿çšãããŸããã
6. ã€ã³ããã¯ã¹ã宿çã«ã¡ã³ããã³ã¹ããçµ±èšãæŽæ°ãã
ããŒã¿ããŒã¹ã€ã³ããã¯ã¹ã¯ãç¹ã«é«ãã©ã³ã¶ã¯ã·ã§ã³ç°å¢ã§ã¯ãæ¿å ¥ãæŽæ°ãåé€ã«ããæéãšãšãã«æçåããããšããããŸããæçåãšã¯ãã€ã³ããã¯ã¹ã®è«ççãªé åºããã£ã¹ã¯äžã®ç©ççãªé åºãšäžèŽããªãããšãæå³ããéå¹çãªI/Oæäœã«ã€ãªãããŸãã
- åæ§ç¯ vs. åç·šæïŒ
- åæ§ç¯ïŒ ã€ã³ããã¯ã¹ãåé€ããŠåäœæããæçåãé€å»ããŠçµ±èšãåæ§ç¯ããŸããããã¯ãã圱é¿ã倧ãããRDBMSãšãšãã£ã·ã§ã³ã«ãã£ãŠã¯ããŠã³ã¿ã€ã ãå¿ èŠãªå ŽåããããŸãã
- åç·šæïŒ ã€ã³ããã¯ã¹ã®ãªãŒãã¬ãã«ã®æçåãè§£æ¶ããŸããããã¯ãªã³ã©ã€ã³æäœïŒããŠã³ã¿ã€ã ãªãïŒã§ãããåæ§ç¯ã»ã©æçåã®é€å»ã«å¹æçã§ã¯ãããŸããã
- çµ±èšã®æŽæ°ïŒ ããã¯ãããããã€ã³ããã¯ã¹ã®æçåè§£æ¶ãããéèŠã§ããããŒã¿ããŒã¹ã®ã¯ãšãªãªããã£ãã€ã¶ã¯ãããŒãã«ãã€ã³ããã¯ã¹å ã®ããŒã¿ååžã«é¢ããæ£ç¢ºãªçµ±èšã«å€§ããäŸåããŠãã¯ãšãªå®è¡èšç»ã«é¢ããæ å ±ã«åºã¥ããæ±ºå®ãäžããŸããå€ãçµ±èšã¯ãå®ç§ãªã€ã³ããã¯ã¹ãååšããŠããŠãããªããã£ãã€ã¶ãæé©ã§ãªããã©ã³ãéžæããåå ãšãªããŸããçµ±èšã¯ãç¹ã«å€§å¹ ãªããŒã¿å€æŽã®åŸã宿çã«æŽæ°ããå¿ èŠããããŸãã
7. ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠãã
ããŒã¿ããŒã¹ã®æé©åã¯ãäžåºŠããã®ã¿ã¹ã¯ã§ã¯ãªããç¶ç¶çãªããã»ã¹ã§ããå ç¢ãªç£èŠããŒã«ãå°å ¥ããŠãã¯ãšãªã®ããã©ãŒãã³ã¹ããªãœãŒã¹äœ¿çšçïŒCPUãã¡ã¢ãªããã£ã¹ã¯I/OïŒãã€ã³ããã¯ã¹ã®äœ¿çšç¶æ³ã远跡ããŸããããŒã¹ã©ã€ã³ãèšå®ããéžè±ã«å¯Ÿããã¢ã©ãŒããèšå®ããŸããã¢ããªã±ãŒã·ã§ã³ã®é²åããŠãŒã¶ãŒããŒã¹ã®å¢å ãããŒã¿ãã¿ãŒã³ã®å€åã«äŒŽããããã©ãŒãã³ã¹ã®ããŒãºã¯å€ããå¯èœæ§ããããŸãã
8. çŸå®çãªããŒã¿ãšã¯ãŒã¯ããŒãã§ãã¹ããã
æ¬çªç°å¢ã®ãããªããŒã¿éãšã¢ããªã±ãŒã·ã§ã³ã®ã¯ãŒã¯ããŒãã®çŸå®çãªè¡šçŸãæã€ãã¹ãç°å¢ã§åŸ¹åºçãªãã¹ããè¡ãããšãªããæ¬çªç°å¢ã«çŽæ¥å€§å¹ ãªã€ã³ããã¯ã¹å€æŽãå®è£ ããªãã§ãã ãããè² è·ãã¹ãããŒã«ã䜿çšããŠåæãŠãŒã¶ãŒãã·ãã¥ã¬ãŒãããã€ã³ããã¯ã¹å€æŽãããŸããŸãªã¯ãšãªã«äžãã圱é¿ã枬å®ããŸãã
äžè¬çãªã€ã³ããã¯ã¹äœæã®èœãšã穎ãšãã®åé¿æ¹æ³
çµéšè±å¯ãªéçºè ãããŒã¿ããŒã¹ç®¡çè ã§ãããã€ã³ããã¯ã¹äœæã«é¢ããŠã¯äžè¬çãªçœ ã«é¥ãããšããããŸããèªèããããšãåé¿ã®ç¬¬äžæ©ã§ãã
1. ãã¹ãŠãã€ã³ããã¯ã¹åãã
èœãšãç©ŽïŒ ãã€ã³ããã¯ã¹ãå€ãã»ã©åžžã«è¯ãããšãã誀ã£ã信念ããã¹ãŠã®åã«ã€ã³ããã¯ã¹ãä»ããããåäžã®ããŒãã«ã«å€æ°ã®è€åã€ã³ããã¯ã¹ãäœæãããããããšã ãªãæªãã®ãïŒ åè¿°ã®éããããã«ããæžã蟌ã¿ãªãŒããŒããããå€§å¹ ã«å¢å ããDMLæäœãé ããªããéå°ãªã¹ãã¬ãŒãžãæ¶è²»ããã¯ãšãªãªããã£ãã€ã¶ãæ··ä¹±ãããå¯èœæ§ããããŸãã 解決çïŒ éžæçã§ããããšãå¿ èŠãªãã®ã ãã«ã€ã³ããã¯ã¹ãä»ãã`WHERE`ã`JOIN`ã`ORDER BY`ã`GROUP BY`å¥ã§é »ç¹ã«ã¯ãšãªãããåãç¹ã«ã«ãŒãã£ããªãã£ãé«ãåã«çŠç¹ãåœãŠãŸãã
2. æžã蟌ã¿ããã©ãŒãã³ã¹ãç¡èŠãã
èœãšãç©ŽïŒ `SELECT`ã¯ãšãªã®ããã©ãŒãã³ã¹ã«ã®ã¿çŠç¹ãåœãŠã`INSERT`ã`UPDATE`ã`DELETE`æäœãžã®åœ±é¿ãç¡èŠããããšã ãªãæªãã®ãïŒ ååæ€çŽ¢ã¯è¶ é«éã ããæ³šæã®æ¿å ¥ãé ãeã³ããŒã¹ã·ã¹ãã ã¯ãããã«äœ¿çšäžèœã«ãªããŸãã 解決çïŒ ã€ã³ããã¯ã¹ã远å ãŸãã¯å€æŽããåŸãDMLæäœã®ããã©ãŒãã³ã¹ã枬å®ããŸããæžã蟌ã¿ããã©ãŒãã³ã¹ã蚱容ã§ããªãã»ã©äœäžããå Žåãã€ã³ããã¯ã¹æŠç¥ãåèããŸããããã¯ãåææžã蟌ã¿ãäžè¬çãªã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãã
3. ã€ã³ããã¯ã¹ã®ã¡ã³ããã³ã¹ãçµ±èšã®æŽæ°ãæ ã
èœãšãç©ŽïŒ ã€ã³ããã¯ã¹ãäœæããåŸãããããå¿ããŠããŸãããšãæçåãèç©ããçµ±èšãå€ããªãã®ãèš±ãããšã ãªãæªãã®ãïŒ æçåãããã€ã³ããã¯ã¹ã¯ãã£ã¹ã¯I/Oãå¢ãããã¯ãšãªãé ãããŸããå€ãçµ±èšã¯ãã¯ãšãªãªããã£ãã€ã¶ãæªã決å®ãäžãåå ãšãªãã广çãªã€ã³ããã¯ã¹ãç¡èŠããå¯èœæ§ããããŸãã 解決çïŒ ã€ã³ããã¯ã¹ã®åæ§ç¯/åç·šæãšçµ±èšã®æŽæ°ãå«ã宿çãªã¡ã³ããã³ã¹èšç»ãå®è£ ããŸããèªååã¹ã¯ãªããã§ãªãããŒã¯æã«ãããåŠçã§ããŸãã
4. ã¯ãŒã¯ããŒãã«å¯ŸããŠäžé©åãªã€ã³ããã¯ã¹ã¿ã€ãã䜿çšãã
èœãšãç©ŽïŒ äŸãã°ãç¯å²ã¯ãšãªã«ããã·ã¥ã€ã³ããã¯ã¹ã䜿çšããããšããããé«äžŠè¡æ§ã®OLTPã·ã¹ãã ã§ããããããã€ã³ããã¯ã¹ã䜿çšãããããããšã ãªãæªãã®ãïŒ äžé©åãªã€ã³ããã¯ã¹ã¿ã€ãã¯ããªããã£ãã€ã¶ã«äœ¿çšãããªãããæ·±å»ãªããã©ãŒãã³ã¹åé¡ïŒäŸïŒOLTPã§ã®ããããããã€ã³ããã¯ã¹ã«ããéå°ãªããã¯ïŒãåŒãèµ·ãããŸãã 解決çïŒ åã€ã³ããã¯ã¹ã¿ã€ãã®ç¹æ§ãšå¶éãçè§£ããŸããã€ã³ããã¯ã¹ã¿ã€ããç¹å®ã®ã¯ãšãªãã¿ãŒã³ãšããŒã¿ããŒã¹ã¯ãŒã¯ããŒãïŒOLTP vs. OLAPïŒã«åãããŸãã
5. ã¯ãšãªãã©ã³ã®çè§£äžè¶³
èœãšãç©ŽïŒ ã¯ãšãªã®ããã©ãŒãã³ã¹åé¡ã«ã€ããŠæšæž¬ããããæåã«ã¯ãšãªå®è¡èšç»ãåæããã«ç²ç®çã«ã€ã³ããã¯ã¹ã远å ãããããããšã ãªãæªãã®ãïŒ å¹æã®ãªãã€ã³ããã¯ã¹äœæãéå°ãªã€ã³ããã¯ã¹äœæããããŠç¡é§ãªåªåã«ã€ãªãããŸãã 解決çïŒ éžæããRDBMSã§ã¯ãšãªå®è¡èšç»ãèªã¿è§£ãæ¹æ³ãåŠã¶ããšãåªå ããŸããããã¯ãã¯ãšãªãã©ã®ããã«å®è¡ãããŠããããçè§£ããããã®æ±ºå®çãªçå®ã®æºã§ãã
6. ã«ãŒãã£ããªãã£ã®äœãåãåç¬ã§ã€ã³ããã¯ã¹åãã
èœãšãç©ŽïŒ `is_active`ã®ãããªåïŒtrue/falseã®2ã€ã®åå¥å€ãããªãïŒã«åäžåã®ã€ã³ããã¯ã¹ãäœæããããšã ãªãæªãã®ãïŒ ããŒã¿ããŒã¹ã¯ãå°ããªã€ã³ããã¯ã¹ãã¹ãã£ã³ããŠããã¡ã€ã³ããŒãã«ã«å€ãã®ã«ãã¯ã¢ãããå®è¡ããæ¹ããåã«ãã«ããŒãã«ã¹ãã£ã³ãè¡ããããå®éã«ã¯é ããšå€æãããããããŸãããã€ã³ããã¯ã¹ã¯ãåç¬ã§å¹ççã§ããã»ã©ååãªè¡ããã£ã«ã¿ãªã³ã°ããŸããã 解決çïŒ äœã«ãŒãã£ããªãã£ã®åã«ã¹ã¿ã³ãã¢ãã³ã®ã€ã³ããã¯ã¹ã圹ç«ã€ããšã¯ãã£ãã«ãããŸãããããã®ãããªåã¯ãããã«ãŒãã£ããªãã£ã®é«ãåã«ç¶ãè€åã€ã³ããã¯ã¹ã®*æåŸã®*åãšããŠå«ãããšéåžžã«å¹æçã§ããOLAPã®å Žåãããããããã€ã³ããã¯ã¹ããã®ãããªåã«é©ããŠããå ŽåããããŸãã
ããŒã¿ããŒã¹æé©åã«ãããã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ããŒã¿ããŒã¹ãœãªã¥ãŒã·ã§ã³ãèšèšããå Žåãã€ã³ããã¯ã¹æŠç¥ã¯ããã«è€éããšéèŠæ§ã®å±€ã垯ã³ãŸãã
1. 忣ããŒã¿ããŒã¹ãšã·ã£ãŒãã£ã³ã°
çã®ã°ããŒãã«ã¹ã±ãŒã«ã®ããã«ã¯ãããŒã¿ããŒã¹ã¯ãã°ãã°è€æ°ã®å°ççå°åã«åæ£ãããããããå°ãã管çããããåäœã«ã·ã£ãŒãã£ã³ã°ïŒããŒãã£ã·ã§ã³åå²ïŒãããŸããã³ã¢ãšãªãã€ã³ããã¯ã¹äœæã®ååã¯äŸç¶ãšããŠé©çšãããŸãããæ¬¡ã®ç¹ãèæ ®ããå¿ èŠããããŸãïŒ
- ã·ã£ãŒãããŒã®ã€ã³ããã¯ã¹äœæïŒ ã·ã£ãŒãã£ã³ã°ã«äœ¿çšãããåïŒäŸïŒ`user_id`ã`region_id`ïŒã¯ãããŒã¿ãããŒãéã§ã©ã®ããã«åæ£ããã¢ã¯ã»ã¹ãããããæ±ºå®ãããããå¹ççã«ã€ã³ããã¯ã¹ãä»ããå¿ èŠããããŸãã
- ã¯ãã¹ã·ã£ãŒãã¯ãšãªïŒ ã€ã³ããã¯ã¹ã¯è€æ°ã®ã·ã£ãŒãã«ãŸãããã¯ãšãªãæé©åããã®ã«åœ¹ç«ã¡ãŸããããããã¯æ¬è³ªçã«ããè€éã§ã³ã¹ããããããŸãã
- ããŒã¿ã®å±ææ§ïŒ äž»ã«åäžã®å°åãŸãã¯ã·ã£ãŒãå ã®ããŒã¿ã«ã¢ã¯ã»ã¹ããã¯ãšãªã®ããã«ã€ã³ããã¯ã¹ãæé©åããŸãã
2. å°åããšã®ã¯ãšãªãã¿ãŒã³ãšããŒã¿ã¢ã¯ã»ã¹
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã¯ãç°ãªãå°åã®ãŠãŒã¶ãŒããç°ãªãã¯ãšãªãã¿ãŒã³ãèŠããããããŸãããäŸãã°ãã¢ãžã¢ã®ãŠãŒã¶ãŒã¯`product_category`ã§é »ç¹ã«ãã£ã«ã¿ãªã³ã°ãããããããŸãããããšãŒãããã®ãŠãŒã¶ãŒã¯`manufacturer_id`ã§ã®ãã£ã«ã¿ãªã³ã°ãåªå ãããããããŸããã
- å°åããšã®ã¯ãŒã¯ããŒããåæããïŒ åæã䜿çšããŠãç°ãªãå°ççãŠãŒã¶ãŒã°ã«ãŒãããã®ãŠããŒã¯ãªã¯ãšãªãã¿ãŒã³ãçè§£ããŸãã
- 調æŽãããã€ã³ããã¯ã¹äœæïŒ å°ååºæã®ã€ã³ããã¯ã¹ããç¹å®ã®å°åã§é »ç¹ã«äœ¿çšãããåãåªå ããè€åã€ã³ããã¯ã¹ãäœæããããšãæçãªå ŽåããããŸããç¹ã«ãå°åã®ããŒã¿ããŒã¹ã€ã³ã¹ã¿ã³ã¹ããªãŒãã¬ããªã«ãããå Žåã¯ããã§ãã
3. ã¿ã€ã ãŸãŒã³ã𿥿ããŒã¿
ç¹ã«ã¿ã€ã ãŸãŒã³ããŸããã§`DATETIME`åãæ±ãå Žåãã¹ãã¬ãŒãžã®äžè²«æ§ïŒäŸïŒUTCïŒã確ä¿ãããããã®ãã£ãŒã«ãã§ã®ç¯å²ã¯ãšãªã®ã€ã³ããã¯ã¹äœæãæ€èšããŸããæ¥æåã®ã€ã³ããã¯ã¹ã¯ãæç³»ååæãã€ãã³ããã®ã³ã°ãã¬ããŒãäœæã«ãšã£ãŠéèŠã§ããããããã¯ã°ããŒãã«ãªéçšã§äžè¬çã§ãã
4. ã¹ã±ãŒã©ããªãã£ãšé«å¯çšæ§
ã€ã³ããã¯ã¹ã¯èªã¿åãæäœãã¹ã±ãŒãªã³ã°ããããã®åºæ¬ã§ããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ãæé·ããã«ã€ããŠãå¢ãç¶ããåæã¯ãšãªæ°ãåŠçããèœåã¯ã广çãªã€ã³ããã¯ã¹äœæã«å€§ããäŸåããŸããããã«ãé©åãªã€ã³ããã¯ã¹äœæã¯ãã©ã€ããªããŒã¿ããŒã¹ã®è² è·ã軜æžãããªãŒãã¬ããªã«ãããå€ãã®ãã©ãã£ãã¯ãåŠçã§ããããã«ããã·ã¹ãã å šäœã®å¯çšæ§ãåäžãããããšãã§ããŸãã
5. ã³ã³ãã©ã€ã¢ã³ã¹ãšããŒã¿äž»æš©
çŽæ¥çãªã€ã³ããã¯ã¹äœæã®æžå¿µã§ã¯ãããŸããããã€ã³ããã¯ã¹ãä»ããããã«éžæããåã¯ãèŠå¶éµå®ïŒäŸïŒå人ãç¹å®ã§ããæ å ±ãéèããŒã¿ïŒã«é¢é£ããããšããããŸããåœå¢ãè¶ããŠæ©å¯æ å ±ãæ±ãéã¯ãããŒã¿ã®ä¿åãšã¢ã¯ã»ã¹ãã¿ãŒã³ã«æ³šæããŠãã ããã
çµè«ïŒæé©åãšããçµããã®ãªãæ
æŠç¥çãªã€ã³ããã¯ã¹äœæã«ããããŒã¿ããŒã¹ã¯ãšãªã®æé©åã¯ãããŒã¿é§ååã¢ããªã±ãŒã·ã§ã³ãç¹ã«ã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ã«ãµãŒãã¹ãæäŸããå°éå®¶ã«ãšã£ãŠäžå¯æ¬ ãªã¹ãã«ã§ããããã¯éçãªã¿ã¹ã¯ã§ã¯ãªããåæãå®è£ ãç£èŠããããŠæŽç·Žã®ç¶ç¶çãªæ ã§ãã
ç°ãªãçš®é¡ã®ã€ã³ããã¯ã¹ãçè§£ãããã€ããªãããããé©çšããããèªèãããã¹ããã©ã¯ãã£ã¹ãéµå®ããäžè¬çãªèœãšã穎ãé¿ããããšã§ãå€§å¹ ãªããã©ãŒãã³ã¹ã®åäžãå®çŸããäžçäžã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããŒã¿ããŒã¹ã€ã³ãã©ããã€ãããã¯ãªã°ããŒãã«ããžã¿ã«çµæžã®èŠæ±ã«å¹ççã«å¯Ÿå¿ã§ããããã«ãªããŸãã
å®è¡èšç»ã䜿çšããŠæãé ãã¯ãšãªãåæããããšããå§ããŸããããå¶åŸ¡ãããç°å¢ã§ããŸããŸãªã€ã³ããã¯ã¹æŠç¥ãå®éšããŠãã ãããããŒã¿ããŒã¹ã®å¥å šæ§ãšããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããŠãã ãããã€ã³ããã¯ã¹æŠç¥ãç¿åŸããããã®æè³ã¯ãå¿çæ§ãé«ããå ç¢ã§ãã°ããŒãã«ã«ç«¶äºåã®ããã¢ããªã±ãŒã·ã§ã³ãšãã圢ã§å ±ãããã§ãããã