ãã®ããŒãžã¯æ©æ¢°ç¿»èš³ãããã®ã§ãã
ä¿¡é Œæ§ãšã¹ã±ãŒã©ããªãã£ãåäžãããããã« InnoDB ã«å€æãã MyISAM ããŒãã«ãããå Žåã¯ã倿ããåã«æ¬¡ã®ã¬ã€ãã©ã€ã³ãšãã³ãã確èªããŠãã ããã
以åã®ããŒãžã§ã³ã® MySQL ã§äœæãããããŒãã£ã·ã§ã³åããã MyISAM ããŒãã«ã¯ãMySQL 8.0 ãšäºææ§ããããŸããã ãã®ãããªããŒãã«ã¯ãããŒãã£ã·ã§ã³åãåé€ããããInnoDB ã«å€æããŠãã¢ããã°ã¬ãŒãåã«æºåããå¿
èŠããããŸãã 詳现ã¯ãã»ã¯ã·ã§ã³24.6.2ãã¹ãã¬ãŒãžãšã³ãžã³ã«é¢é£ããããŒãã£ã·ã§ãã³ã°å¶éããåç
§ããŠãã ããã
MyISAM ããŒãã«ããç§»è¡ãããšãã«ãçµæããã£ãã·ã¥ããéã«å¿
èŠã§ãªããªã£ãã¡ã¢ãªãŒãè§£æŸãããããã«ãkey_buffer_size æ§æãªãã·ã§ã³ã®å€ãå°ããããŸãã InnoDB ããŒãã«çšã®ãã£ãã·ã¥ã¡ã¢ãªãŒå²ãåœãŠãšåæ§ã®åœ¹å²ãæ
ã innodb_buffer_pool_size æ§æãªãã·ã§ã³ã®å€ã倧ããããŸãã InnoDB buffer pool ã§ã¯ãããŒãã«ããŒã¿ãšã€ã³ããã¯ã¹ããŒã¿ã®äž¡æ¹ããã£ãã·ã¥ããããããã¯ãšãªãŒã®ã«ãã¯ã¢ãããé«éåãããåå©çšã®ããã«ã¯ãšãªãŒçµæãã¡ã¢ãªãŒã«ä¿æãããŸãã ãããã¡ãŒããŒã«ãµã€ãºã®æ§æã«é¢ããã¬ã€ãã³ã¹ã«ã€ããŠã¯ãã»ã¯ã·ã§ã³8.12.3.1ãMySQL ã®ã¡ã¢ãªãŒã®äœ¿ç𿹿³ã ãåç
§ããŠãã ããã
MyISAM ããŒãã«ã§ã¯ãã©ã³ã¶ã¯ã·ã§ã³ããµããŒããããŠããªããããautocommit æ§æãªãã·ã§ã³ãšãCOMMIT ããã³ ROLLBACK ã¹ããŒãã¡ã³ãã«å€ãã®æ³šæãæãããŠããªãå¯èœæ§ããããŸãã ãããã®ããŒã¯ãŒãã¯ãè€æ°ã®ã»ãã·ã§ã³ã䞊åã㊠InnoDB ããŒãã«ã®èªã¿åãããã³æžã蟌ã¿ãè¡ãããšãèš±å¯ããéã«éèŠãšãªããŸããããã«ãããæžã蟌ã¿è² è·ã®é«ãã¯ãŒã¯ããŒãã§ååãªæ¡åŒµæ§ã®å©ç¹ãåŸãããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ãéããŠããéã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®éå§æã«èŠããããããªããŒã¿ã®ã¹ãããã·ã§ãããã·ã¹ãã ã§ä¿æãããŸããããã«ãããæªåŠçã®ãã©ã³ã¶ã¯ã·ã§ã³ãåäœãç¶ããŠããéã«ãã·ã¹ãã ã§æ°çŸäžè¡ã®æ¿å ¥ãæŽæ°ãããã³åé€ãè¡ããããšãçžåœãªãªãŒããŒããããçºçããå¯èœæ§ããããŸãã ãã®ãããåäœæéãé·ããããã©ã³ã¶ã¯ã·ã§ã³ã¯åé¿ããããã«æ³šæããŠãã ããã
ã€ã³ã¿ã©ã¯ãã£ããªå®éšã§ mysql ã»ãã·ã§ã³ã䜿çšããŠããå Žåã¯ãå®äºåŸã«å¿ ãã(倿Žãå®äºãããå Žåã¯)
COMMITããŸã㯠(倿Žãåãæ¶ãå Žåã¯)ROLLBACKãå®è¡ããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ã誀ã£ãŠé·æéãªãŒãã³ãããŸãŸã«ããªãããã«ã察話åã»ãã·ã§ã³ãé·æéãªãŒãã³ãããŸãŸã«ããŠããã®ã§ã¯ãªããã¯ããŒãºããŸããã¢ããªã±ãŒã·ã§ã³å ã®ä»»æã®ãšã©ãŒãã³ãã©ã§ããäžå®å šãªå€æŽã®
ROLLBACKãå®è¡ãããããå®äºãã倿Žã®COMMITãå®è¡ãããããšã確èªããŸããINSERTãUPDATEããã³DELETEã®åæäœã¯COMMITããåã«InnoDBããŒãã«ã«æžã蟌ãŸãããããROLLBACKã¯æ¯èŒçã³ã¹ãã®é«ãæäœã§ãããã»ãšãã©ã®å€æŽã¯æ£åžžã«ã³ããããããããŒã«ããã¯ã¯ãŸãã§ãã 倧éã®ããŒã¿ã䜿çšããŠå®éšããéã¯ã倿°ã®è¡ã«å€æŽãå ããŠããããããã®å€æŽãããŒã«ããã¯ããããšã¯åé¿ããŠãã ãããäžé£ã®
INSERTã¹ããŒãã¡ã³ãã䜿çšããŠå€§éã®ããŒã¿ãããŒãããéã¯ããã©ã³ã¶ã¯ã·ã§ã³ãæ°æéåç¶ããããšãåé¿ããããã«ã宿çã«çµæã®COMMITãå®è¡ããŸãã ããŒã¿ãŠã§ã¢ããŠã¹ã®äžè¬çãªããŒãæäœã§ã¯ããªãããã®åé¡ãçºçããå ŽåãROLLBACKãå®è¡ããã®ã§ã¯ãªãã(TRUNCATE TABLEã䜿çšããŠ) ããŒãã«ãåãæšãŠãŠæåããããçŽããŸãã
åè¿°ã®ãã³ãã䜿çšãããšãé·ããããã©ã³ã¶ã¯ã·ã§ã³äžã«ç¡é§ã«ãªãå¯èœæ§ã®ããã¡ã¢ãªãŒããã³ãã£ã¹ã¯å®¹éãç¯çŽã§ããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ãæ¬æ¥ãããçãå Žåã¯ãéå°ãª I/O ãåé¡ãšãªããŸãã MySQL ã§ã¯ãCOMMIT ãå®è¡ããããã³ã«ãå倿Žãå®å
šã«ãã£ã¹ã¯ã«èšé²ãããŠããããšã確èªãããŸããããã«ã¯ãå€å°ã® I/O ã䌎ããŸãã
InnoDBããŒãã«äžã®ã»ãšãã©ã®æäœã§ã¯ãautocommit=0ã®èšå®ã䜿çšããããã«ããŠãã ããã å¹çæ§ã®èгç¹ããèŠããšãããã«ããã倿°ã®é£ç¶ããINSERTãUPDATEããŸãã¯DELETEã¹ããŒãã¡ã³ããçºè¡ãããšãã®äžèŠãª I/O ãåé¿ãããŸãã å®å šæ§ã®èгç¹ããèŠããšãããã«ãããmysql ã³ãã³ãè¡ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã®äŸå€ãã³ãã©ã«èª€ãããã£ãå Žåã«ãROLLBACKã¹ããŒãã¡ã³ããçºè¡ããããšã§ã倱ã£ãããŒã¿ãæååãããããŒã¿ããªã«ããªã§ããŸããInnoDBããŒãã«ã«autocommit=1ãèšå®ããããšãé©ããŠããç¶æ³ã¯ãã¬ããŒãã®çæãŸãã¯çµ±èšã®åæãè¡ãããã«äžé£ã®ã¯ãšãªãŒãå®è¡ãããšãã§ãã ãã®ãããªç¶æ³ã§ã¯ãCOMMITãŸãã¯ROLLBACKã«é¢é£ãã I/O ããã«ãã£ãŒãçºçãããInnoDBã¯èªåçã«èªã¿åãå°çšã®ã¯ãŒã¯ããŒããæé©åã§ããŸããäžé£ã®é¢é£ãã倿Žãè¡ãå Žåã¯ãæåŸã«åäžã®
COMMITã䜿çšããŠããã¹ãŠã®å€æŽãäžåºŠã«ç¢ºå®ããŸãã ããšãã°ãæ å ±ã®é¢é£éšåãè€æ°ã®ããŒãã«ã«æ¿å ¥ããå Žåã¯ããã¹ãŠã®å€æŽãè¡ãªã£ãããšã«ãCOMMITã 1 åå®è¡ããŸãã ãŸããé£ç¶ãã倿°ã®INSERTã¹ããŒãã¡ã³ããå®è¡ããå Žåã¯ããã¹ãŠã®ããŒã¿ãããŒããããããšã«ãCOMMITã 1 åå®è¡ããŸããäœçŸäžãã®INSERTã¹ããŒãã¡ã³ããå®è¡ããå Žåã¯ãäžäžãŸãã¯äžåã¬ã³ãŒãããšã«COMMITãçºè¡ããããšã§ã巚倧ãªãã©ã³ã¶ã¯ã·ã§ã³ãåå²ããããšããããŸããSELECTã¹ããŒãã¡ã³ãã§ããã©ã³ã¶ã¯ã·ã§ã³ãéããããããã€ã³ã¿ã©ã¯ãã£ã㪠mysql ã»ãã·ã§ã³ã§äžéšã®ã¬ããŒããå®è¡ããããã¯ãšãªãŒããããã°ãããããããšã¯ãCOMMITãçºè¡ãããããŸã㯠mysql ã»ãã·ã§ã³ãéããŸãã
MySQL ã®ãšã©ãŒãã°ãŸã㯠SHOW ENGINE INNODB STATUS ã®åºåã«ãããããããã¯ãã«èšåããèŠåã¡ãã»ãŒãžã衚瀺ãããããšããããŸãã ãããããã¯ã¯ãæãããé¿ãã®ååã«ãããããããInnoDB ããŒãã«ã«ãšã£ãŠã¯é倧ãªåé¡ã§ãªããä¿®æ£ã¢ã¯ã·ã§ã³ã¯äœãå¿
èŠãããŸããã 2 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ãè€æ°ã®ããŒãã«ã倿Žãããã®ããŒãã«ã«å¥ã
ã®é åºã§ã¢ã¯ã»ã¹ãå§ãããšãåãã©ã³ã¶ã¯ã·ã§ã³ãçžäºã«åŸ
æ©ãåã£ãŠãã©ã¡ããåŠçã§ããªãç¶æ
ã«éããå¯èœæ§ããããŸãã deadlock detection ãæå¹ã«ãªã£ãŠããå Žå (ããã©ã«ã)ãMySQL ã¯ãã®æ¡ä»¶ããã ã¡ã«æ€åºããããå°ãããããã©ã³ã¶ã¯ã·ã§ã³ãåãæ¶ããŠä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ãç¶è¡ã§ããããã«ããŸã (rolls back)ã innodb_deadlock_detect æ§æãªãã·ã§ã³ã䜿çšããŠãããããã¯æ€åºãç¡å¹ã«ãªã£ãŠããå ŽåãInnoDB ã¯ããããããã¯ã®å Žåã«ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ããããã« innodb_lock_wait_timeout èšå®ã«äŸåããŸãã
ã©ã¡ãã®æ¹æ³ã§ãããããããã¯ã®ããã«åŒ·å¶çã«åãæ¶ããããã©ã³ã¶ã¯ã·ã§ã³ãåèµ·åããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã«ãšã©ãŒåŠçããžãã¯ãå¿ èŠã§ãã 以åãšåã SQL ã¹ããŒãã¡ã³ããåçºè¡ãããšãå ã®ã¿ã€ãã³ã°ã®åé¡ã¯é©çšãããªããªããŸãã ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ããã§ã«çµäºããŠç¶è¡ã§ããããä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ããŸã é²è¡äžã§ããã©ã³ã¶ã¯ã·ã§ã³ã¯çµäºãããŸã§åŸ æ©ããŸãã
ãããããã¯ã®èŠåãåžžã«çºçããå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããå確èªããŠãäžè²«æ§ã®ããæ¹æ³ã§ SQL æäœãåæç€ºãããããã©ã³ã¶ã¯ã·ã§ã³ãçããããããããšããããŸãã innodb_print_all_deadlocks ãªãã·ã§ã³ãæå¹ã«ããŠãã¹ãããã°ãSHOW ENGINE INNODB STATUS åºåã®æåŸã®èŠåã ãã§ãªããMySQL ã®ãšã©ãŒãã°ã«ããã¹ãŠã®ãããããã¯ã®èŠåã衚瀺ã§ããŸãã
詳现ã¯ãã»ã¯ã·ã§ã³15.7.5ãInnoDB ã®ãããããã¯ããåç §ããŠãã ããã
InnoDB ããŒãã«ããæé«ã®ããã©ãŒãã³ã¹ãåŒãåºãããã«ãã¹ãã¬ãŒãžã¬ã€ã¢ãŠãã«é¢é£ããæ°å€ãã®ãã©ã¡ãŒã¿ã調æŽã§ããŸãã
å€§èŠæš¡ã§é »ç¹ã«ã¢ã¯ã»ã¹ããã MyISAM ããŒãã«ã倿ããéèŠãªããŒã¿ãä¿æããå Žåã¯ãCREATE TABLE ã¹ããŒãã¡ã³ãã® innodb_file_per_table ããã³ innodb_page_size ã®æ§æãªãã·ã§ã³ãš ROW_FORMAT and KEY_BLOCK_SIZE clauses ã調æ»ããŠæ€èšããŸãã
åæã®å®éšæã«ããã£ãšãéèŠãšãªãèšå®ã¯ innodb_file_per_table ã§ãã ãã®èšå®ãæå¹ã«ãããš (ããã©ã«ã)ãæ°ãã InnoDB ããŒãã«ã file-per-table ããŒãã«ã¹ããŒã¹ã«æé»çã«äœæãããŸãã InnoDB ã·ã¹ãã ããŒãã«ã¹ããŒã¹ãšã¯å¯Ÿç
§çã«ãfile-per-table ããŒãã«ã¹ããŒã¹ã䜿çšãããšãããŒãã«ã®åæšãŠãŸãã¯å逿ã«ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãã£ã¹ã¯é åãåå©çšã§ããŸãã File-per-table ããŒãã«ã¹ããŒã¹ã§ã¯ãããŒãã«å§çž®ãé·ãå¯å€é·ã«ã©ã ã®å¹ççãªãªãããŒãžã¹ãã¬ãŒãžãå€§èŠæš¡ãªã€ã³ããã¯ã¹æ¥é èŸãªã©ãDYNAMIC ããã³ COMPRESSED ã®è¡åœ¢åŒããã³é¢é£ããæ©èœããµããŒããããŸãã 詳现ã¯ãã»ã¯ã·ã§ã³15.6.3.2ãFile-Per-Table ããŒãã«ã¹ããŒã¹ããåç
§ããŠãã ããã
è€æ°ã®ããŒãã«ããã³ãã¹ãŠã®è¡åœ¢åŒããµããŒãããå
±æäžè¬ããŒãã«ã¹ããŒã¹ã« InnoDB ããŒãã«ãæ ŒçŽããããšãã§ããŸãã 詳现ã¯ãã»ã¯ã·ã§ã³15.6.3.3ãäžè¬ããŒãã«ã¹ããŒã¹ããåç
§ããŠãã ããã
InnoDB ã䜿çšããããã« InnoDB 以å€ã®ããŒãã«ã倿ããã«ã¯ãALTER TABLE ã䜿çšããŸãã
ALTER TABLE table_name ENGINE=InnoDB;
åãæ¿ããåã«ãALTER TABLE ã䜿çšããŠå€æãå®è¡ããã®ã§ã¯ãªããMyISAM ããŒãã«ã®ã¯ããŒã³ã§ãã InnoDB ããŒãã«ãäœæããŠãå€ãããŒãã«ãšæ°ããããŒãã«ã䞊ã¹ãŠãã¹ãã§ããŸãã
åãã«ã©ã ãšã€ã³ããã¯ã¹ã®å®çŸ©ãæã€ç©ºã® InnoDB ããŒãã«ãäœæããŸãã SHOW CREATE TABLE ã䜿çšããŠã䜿çšããå®å
šãª table_name\GCREATE TABLE ã¹ããŒãã¡ã³ãã確èªããŸãã ENGINE å¥ã ENGINE=INNODB ã«å€æŽããŸãã
åã®ã»ã¯ã·ã§ã³ã§ç€ºããããã«ãäœæããã空㮠InnoDB ããŒãã«ã«å€§éã®ããŒã¿ã転éããã«ã¯ãINSERT INTO ã䜿çšããŠè¡ãæ¿å
¥ããŸãã
innodb_table SELECT * FROM myisam_table ORDER BY primary_key_columns
ããŒã¿ãæ¿å
¥ããããšã«ãInnoDB ããŒãã«çšã®ã€ã³ããã¯ã¹ãäœæããããšãã§ããŸãã åŸæ¥ãæ°ããã»ã«ã³ããªã€ã³ããã¯ã¹ãäœæããããšã¯ãInnoDB ã«ãšã£ãŠäœéãªæäœã§ããããçŸåšã¯ãã€ã³ããã¯ã¹ã®äœæã¹ãããã§æ¯èŒçå°ãããªãŒããŒãããã§ããŒã¿ãããŒããããããšã«ãã€ã³ããã¯ã¹ãäœæã§ããããã«ãªããŸããã
å¯ããŒäžã« UNIQUE å¶çŽãããå Žåã¯ãã€ã³ããŒãæäœäžã«äžææ§ãã§ãã¯ãäžæçã«ãªãã«ããããšã§ãããŒãã«ã€ã³ããŒãã®é床ãäžããããšãã§ããŸãã
SET unique_checks=0;
... import operation ...
SET unique_checks=1;
倧ããªããŒãã«ã®å ŽåãInnoDB 㯠change buffer ã䜿çšããŠã»ã«ã³ããªã€ã³ããã¯ã¹ã¬ã³ãŒããããããšããŠæžã蟌ãããšãã§ãããããããã«ãããã£ã¹ã¯ I/O ãç¯çŽãããŸãã ããŒã¿ã«éè€ããŒãå«ãŸããªãããã«ããŸããunique_checks ã§ã¯ãã¹ãã¬ãŒãžãšã³ãžã³ãéè€ããŒãç¡èŠããããšãèš±å¯ãããŠããŸãããå¿
é ã§ã¯ãããŸããã
æ¿å ¥ããã»ã¹ãããé©åã«å¶åŸ¡ããããã«ã倧ããªããŒãã«ãããŒã¹åäœã§æ¿å ¥ã§ããŸã:
INSERT INTO newtable SELECT * FROM oldtable
WHERE yourkey > something AND yourkey <= somethingelse;
ãã¹ãŠã®ã¬ã³ãŒããæ¿å ¥ããåŸãããŒãã«ã®ååã倿Žã§ããŸãã
ãã£ã¹ã¯ I/O ãåæžããã«ã¯ã倧ããªããŒãã«ã®å€ææã«ãæå€§ã§ç©çã¡ã¢ãªãŒã® 80% ãŸã§ InnoDB ãããã¡ãŒããŒã«ã®ãµã€ãºã倧ããããŸãã InnoDB ãã°ãã¡ã€ã«ã®ãµã€ãºãå¢ããããšãã§ããŸãã
倿ããã»ã¹äžã« InnoDB ããŒãã«ã®ããŒã¿ã®äžæã³ããŒãè€æ°äœæããå Žåã¯ãããŒãã«ã®å逿ã«ãã£ã¹ã¯é åãåå©çšã§ããããã«ãfile-per-table ããŒãã«ã¹ããŒã¹ã«ããŒãã«ãäœæããããšããèŠãããŸãã innodb_file_per_table æ§æãªãã·ã§ã³ãæå¹ãªå Žå (ããã©ã«ã)ãæ°ããäœæããã InnoDB ããŒãã«ã¯ file-per-table ããŒãã«ã¹ããŒã¹ã«æé»çã«äœæãããŸãã
MyISAM ããŒãã«ãçŽæ¥å€æããã®ããã¯ããŒã³ã® InnoDB ããŒãã«ãäœæããã®ãã«ã¯é¢ä¿ãªããããã»ã¹äžã«å€ãããŒãã«ãšæ°ããããŒãã«ã®äž¡æ¹ãä¿æããã®ã«ååãªãã£ã¹ã¯é åãããããšã確èªããŸãã InnoDB ããŒãã«ã«ã¯ãMyISAM ããŒãã«ãããå€ãã®ãã£ã¹ã¯é åãå¿
èŠã§ãã ALTER TABLE æäœã«ãã£ãŠé åã䜿ãæãããããšãããŒã«ããã¯ãéå§ãããŸããããã£ã¹ã¯ããŠã³ãã®å Žåã¯ãæ°æéãããå¯èœæ§ããããŸãã æ¿å
¥ã®å ŽåãInnoDB ã¯ãããå
ã®ã€ã³ããã¯ã¹ã«ã»ã«ã³ããªã€ã³ããã¯ã¹ã¬ã³ãŒããããŒãžããéã«ãæ¿å
¥ãããã¡ãŒã䜿çšããŸãã ããã«ããã倧éã®ãã£ã¹ã¯ I/O ãç¯çŽãããŸãã ããŒã«ããã¯ã§ã¯ããã®ãããªã¡ã«ããºã ã¯äœ¿çšãããŸãããããŒã«ããã¯ã¯æ¿å
¥ãããã30 åé·ãæéããããå¯èœæ§ããããŸãã
ã©ã³ããŠã§ã€ããŒã«ããã¯ã®å Žåã¯ãããŒã¿ããŒã¹ã«è²ŽéãªããŒã¿ããªããã°ãäœçŸäžãã®ãã£ã¹ã¯ I/O æäœãå®äºãããŸã§åŸ æ©ããã®ã§ã¯ãªããããŒã¿ããŒã¹ããã»ã¹ã匷å¶çµäºããããšããå§ãããŸãã å®å šãªæé ã«ã€ããŠã¯ãã»ã¯ã·ã§ã³15.21.2ãInnoDB ã®ãªã«ããªã®åŒ·å¶çãªå®è¡ããåç §ããŠãã ããã
PRIMARY KEY å¥ã¯ãMySQL ã¯ãšãªãŒã®ããã©ãŒãã³ã¹ããããŒãã«ããã³ã€ã³ããã¯ã¹çšã®é å䜿çšéã«åœ±é¿ãäžããéèŠãªèŠçŽ ã§ãã äž»ããŒã¯ãããŒãã«å
ã®è¡ãäžæã«èå¥ããŸãã ããŒãã«å
ã®ãã¹ãŠè¡ãäž»ããŒå€ãæã£ãŠããå¿
èŠãããã2 ã€ã®è¡ãåãäž»ããŒå€ãæã€ããšã¯ã§ããŸããã
ãããã¯äž»ããŒã®ã¬ã€ãã©ã€ã³ã§ããã®åŸã«è©³çްãªèª¬æãç¶ããŸãã
ããŒãã«ããšã«
PRIMARY KEYã宣èšããŸãã äžè¬ã«ãåäžã®è¡ãæ€çŽ¢ãããšãã«åç §ãããWHEREå¥å ã®ã«ã©ã ã®äžã§ããã£ãšãéèŠãªãã®ã§ããããšã§
ALTER TABLEã¹ããŒãã¡ã³ãã䜿çšããŠè¿œå ããã®ã§ã¯ãªããå ã®CREATE TABLEã¹ããŒãã¡ã³ãã§PRIMARY KEYå¥ã宣èšããŸããã«ã©ã ãšãã®ããŒã¿åã¯æ éã«éžæããŠãã ããã æåãŸãã¯æååã®ã«ã©ã ããããæ°å€ã®ã«ã©ã ãåªå ããŠãã ããã
å¥ã®å®å®ããŠããŠãäžæã§ãé NULL ã§ãæ°å€ã®ã«ã©ã ã䜿çšã§ããªãå Žåã¯ãèªåã€ã³ã¯ãªã¡ã³ãã«ã©ã ã䜿çšããããšãæ€èšããŠãã ããã
äž»ããŒã«ã©ã ã®å€ã倿Žããããã©ãããçãããå Žåã«ããèªåã€ã³ã¯ãªã¡ã³ãã¯é©åãªéžæã§ãã äž»ããŒã«ã©ã ã®å€ã倿Žããããšã¯ãè² è·ã®é«ãæäœã§ãããããŒãã«å ããã³åã»ã«ã³ããªã€ã³ããã¯ã¹å ã§ããŒã¿ã®åç·šæã䌎ãå¯èœæ§ããããŸãã
äž»ããŒããŸã ååšããªãããŒãã«ã«ã¯ã远å ããããšãæ€èšããŠãã ããã èšç»ãããããŒãã«ã®æå€§ãµã€ãºã«åºã¥ããŠãçŸå®çãªæå°ã®æ°å€åã䜿çšããŸãã ããã«ãããåè¡ããããã«ã³ã³ãã¯ãã«ããããšãã§ãã倧ããªããŒãã«çšã«çžåœãªé åãç¯çŽã§ããŸãã äž»ããŒå€ã¯ãã»ã«ã³ããªã€ã³ããã¯ã¹ãå ¥åããããã³ã«ç¹°ãè¿ããããããããŒãã«ãä»»æã®ã»ã«ã³ããªã€ã³ããã¯ã¹ãæã£ãŠããå Žåã¯ãé åã®ç¯çŽãåå¢ããŸãã å°ããªäž»ããŒã䜿çšãããšããã£ã¹ã¯äžã®ããŒã¿ãµã€ãºãåæžãããããšã«å ããŠãããå€ãã®ããŒã¿ããããã¡ãŒããŒã«å ã«å容ã§ããããããã¹ãŠã®çš®é¡ã®æäœã®é床ãäžãããäžŠåæ§ãæ¹åãããŸãã
ãã§ã«ããŒãã«ã®å€å°é·ãã«ã©ã (VARCHAR ãªã©) äžã«äž»ããŒãååšããå Žåã¯ããã®ã«ã©ã ãã¯ãšãªãŒã§åç
§ãããŠããªããŠããæ°ãã笊å·ãªã AUTO_INCREMENT ã«ã©ã ã远å ããäž»ããŒããã®ã«ã©ã ã«åãæ¿ããããšãæ€èšããŠãã ããã ãã®ãããªèšèšã®å€æŽã«ãã£ãŠãã»ã«ã³ããªã€ã³ããã¯ã¹å
ã®çžåœãªé åãç¯çŽã§ããŸãã 以åã®äž»ããŒã«ã©ã ã UNIQUE NOT NULL ãšããŠæå®ãããšãPRIMARY KEY å¥ãšåãå¶çŽã匷å¶çã«é©çšã§ããŸã (ã€ãŸãããããã®ãã¹ãŠã®ã«ã©ã ã«ããã£ãŠéè€ããå€ã NULL å€ãåé¿ã§ããŸã)ã
é¢é£ããæ å ±ãè€æ°ã®ããŒãã«ã«åæ£ãããå Žåã¯ãäžè¬ã«åããŒãã«ã§ããã®äž»ããŒçšã«åãã«ã©ã ã䜿çšãããŸãã ããšãã°ã人äºéšã®ããŒã¿ããŒã¹ã«ã¯è€æ°ã®ããŒãã«ãå«ãŸããåããŒãã«ã«ã¯åŸæ¥å¡çªå·ã®äž»ããŒãå«ãŸããŠããå ŽåããããŸãã å¶æ¥éšã®ããŒã¿ããŒã¹ã«ã¯ã顧客çªå·ã®äž»ããŒãå«ãããŒãã«ããæ³šæçªå·ã®äž»ããŒãå«ãããŒãã«ãå«ãŸããŠããå ŽåããããŸãã äž»ããŒã䜿çšããæ€çŽ¢ã¯éåžžã«é«éã§ããããããã®ãããªããŒãã«ã«ã¯å¹ççãªçµåã¯ãšãªãŒãæ§ç¯ã§ããŸãã
PRIMARY KEY å¥ãå®å
šã«åé€ãããšãMySQL ã«ãã£ãŠèªåçã«é衚瀺ã®äž»ããŒãäœæãããŸãã ããã¯ãå¿
èŠä»¥äžã«é·ããªãå¯èœæ§ã®ãã 6 ãã€ãã®å€ã§ãããããé åãç¡é§ã«ãªããŸãã ããã¯é衚瀺ã§ãããããã¯ãšãªãŒã§åç
§ã§ããŸããã
InnoDB ã®ä¿¡é Œæ§ããã³ã¹ã±ãŒã©ããªãã£æ©èœã«ã¯ãåçã® MyISAM ããŒãã«ãããå€ãã®ãã£ã¹ã¯èšæ¶åãå¿
èŠã§ãã é åã®äœ¿çšçãæ¹åããçµæã»ãããåŠçããéã® I/O ããã³ã¡ã¢ãªãŒã®æ¶è²»ãåæžããã€ã³ããã¯ã¹æ€çŽ¢ãå¹ççã«äœ¿çšããã¯ãšãªãŒã®æé©åèšç»ãæ¹åããããã«ãã«ã©ã ããã³ã€ã³ããã¯ã¹ã®å®çŸ©ããããã«å€æŽããããšããããŸãã
äž»ããŒã«æ°å€ã® ID ã«ã©ã ãèšå®ããå Žå (ç¹ã«ãçµåã¯ãšãªãŒã®å Žå) ã¯ããã®å€ã䜿çšããŠããã®ä»ã®ä»»æã®ããŒãã«å
ã®é¢é£ããå€ãšçžäºåç
§ããŸãã ããšãã°ãå
¥åãšããŠåœåãåãå
¥ããåãååãæ€çŽ¢ããã¯ãšãªãŒãå®è¡ããã®ã§ã¯ãªããåœ ID ã確èªããããã®æ€çŽ¢ã 1 åå®è¡ããŠãããè€æ°ã®ããŒãã«ã«ããã£ãŠé¢é£æ
å ±ãæ€çŽ¢ããããã®å¥ã®ã¯ãšãªãŒ (ãŸã㯠1 åã®çµåã¯ãšãªãŒ) ãå®è¡ããŸãã 顧客çªå·ãŸãã¯ã«ã¿ãã°é
ç®çªå·ãæ°åã®æååãšããŠæ ŒçŽãããšãæ°ãã€ãã䜿ãæããå¯èœæ§ãããããããã®ä»£ããã«ãæ ŒçŽããã³ã¯ãšãªãŒçšã«æ°å€ã® ID ã«å€æããŸãã 4 ãã€ãã®ç¬Šå·ãªã INT ã«ã©ã ã§ã¯ã40 åãè¶
ããé
ç® (ã¢ã¡ãªã«åè¡åœã§ã® billion ã®æå³: 10 å) ã«ã€ã³ããã¯ã¹ãä»ããããšãã§ããŸãã ããŸããŸãªæŽæ°åã®ç¯å²ã«ã€ããŠã¯ãã»ã¯ã·ã§ã³11.1.2ãæŽæ°å (çæ°å€) - INTEGERãINTãSMALLINTãTINYINTãMEDIUMINTãBIGINTããåç
§ããŠãã ããã
InnoDB ãã¡ã€ã«ã«ã¯ãMyISAM ãã¡ã€ã«ãããå€ãã®æ³šæãšèšç»ãå¿
èŠã§ãã
InnoDBã®ã·ã¹ãã ããŒãã«ã¹ããŒã¹ã衚ã ibdata ãã¡ã€ã«ã¯åé€ããªãã§ãã ãããInnoDBããŒãã«ãå¥ã®ãµãŒããŒã«ç§»åãŸãã¯ã³ããŒããæ¹æ³ã«ã€ããŠã¯ãã»ã¯ã·ã§ã³15.6.1.4ãInnoDB ããŒãã«ã®ç§»åãŸãã¯ã³ããŒã ãåç §ããŠãã ããã