MySQLã®innodbã®ã¤ã³ããã¯ã¹ã«ã¤ãã¦èª¿ã¹ã¦ã¿ã
innodbã®ä¸»ãã¼*1ã¯ã¯ã©ã¹ã¿ã¼ã¤ã³ããã¯ã¹
ã¯ã©ã¹ã¿ã¼ã¤ã³ããã¯ã¹ã§ã¯ã主ãã¼(B-tree)ã®ãªã¼ããã¼ã¸ã«ãã¼ã¿ãç´æ¥æ ¼ç´ããã¦ãã¾ãã
株式会社スタイルズ
以ä¸ã®å³ã®ãããªã¤ã¡ã¼ã¸ã§ãã
å³ã¯å¼ç¨ããã¨ãããããã®ã§ãã¦ã¾ããããå³ãè¦ãã»ããåãããããã§ãã
InnoDBã®ä¸»ãã¼ã¯æ¬¡ã®å³ã®ããã«ããã¼ã¿ã主ãã¼ã®ãªã¼ããã¼ãã«å«ã¾ãããã¨ããæ§é ã«ãªã£ã¦ããããã®ãããªæ§é ãã¯ã©ã¹ã¿ã¤ã³ããã¯ã¹ã¨ããã
漢(オトコ)のコンピュータ道: 知って得するInnoDBセカンダリインデックス活用術!
çè§£ãã«ããã¨ããªã®ã§ãå¥ã®ã¨ã³ããªã¼ãå¼ç¨ããã®ã¨ã³ããªã¼ã«ãåãããããå³ãããã¾ãã
ã»ã«ã³ããªã¼ã¤ã³ããã¯ã¹ã®ãªã¼ãã«ã¯ä¸»ãã¼ã®å¤ãå ¥ã£ã¦ã
ã¯ã©ã¹ã¿ã¤ã³ããã¯ã¹ãç¨ããå ´åããã¼ã¿ã¯ãã¹ã¦ä¸»ãã¼ã«æ ¼ç´ããã¦ããã®ã§ãã»ã«ã³ããªã¤ã³ããã¯ã¹ã¯ç¹æ®ãªæ§é ã«ãªããããå¾ãªããã»ã«ã³ããªã¤ã³ããã¯ã¹ã®å¤ãããã¼ã¿ãåå¾ããã«ã¯ã©ãããã°ããã®ã ãããï¼ãåç¥ã®æ¹ãå¤ãã ããããã»ã«ã³ããªã¤ã³ããã¯ã¹ã®ãªã¼ããã¼ãã«ã¯ä¸»ãã¼ã®å¤ãæ ¼ç´ããã¦ããã
漢(オトコ)のコンピュータ道: 知って得するInnoDBセカンダリインデックス活用術!
åè¿°ã®ã¨ã³ããªã¼ã ãã©ãã»ã«ã³ããªã¼ã¤ã³ããã¯ã¹ã®å³ãåãããããã
主ãã¼ãå®ç¾©ããªãå ´åã§ããçµå±ä¸»ãã¼ã¯ãã
ãããã¼ãã«ã« PRIMARY KEY ãå®ç¾©ããªããã°ãMySQL ã¯ä¸»ãã¼ã¨ã㦠NOT NULL ã«ã©ã ã ããæã¤æåã® UNIQUE ã¤ã³ããã¯ã¹ã鏿ããInnoDB ããããéåã¤ã³ããã¯ã¹ã¨ãã¦å©ç¨ãã¾ãããããã¼ãã«å ã«ãã®ãããªã¤ã³ããã¯ã¹ããªããã°ãInnoDB ã¯ãè¡ã InnoDB ããã®ãããªãã¼ãã«å ã®è¡ã«å²ãå½ã¦ãè¡ ID ã«ãã£ã¦ãªã¼ããããéåã¤ã³ããã¯ã¹ãå é¨çã«çæãã¾ããè¡ ID ã¯ãæ°ããè¡ãæ¿å ¥ãããã¨å調ã«å¢å ãã6ãã¤ãã®ãã£ã¼ã«ãã§ããå¾ã£ã¦ãè¡ ID ã«ãã£ã¦ãªã¼ããããè¡ã¯ç©ççã«æ¿å ¥é ã«ãªã£ã¦ãã¾ãã
MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.2.13 InnoDB テーブルおよびインデックスの構造
- 主ãã¼ãå®ç¾©
- å®ç¾©ãããã®ã主ãã¼ã«ãªã
- NOT NULLãã¤UNIQUEã¤ã³ããã¯ã¹ãä»ããã«ã©ã ããã
- ããã主ãã¼æ±ãã«ãªã
- ä½ãç¡ãå ´å
- å é¨çã«ä¸»ãã¼ãçæãã
èªåã®ã¯ã©ã¹ã¿ã¼ã¤ã³ããã¯ã¹ã¸ã®çè§£ãééã£ã¦ãªããã°ãinnodbã¯ãããããã¼ã¿ãB+treeã®ä¸ã«ç½®ãã®ã§ã主ãã¼ãç¡ãã¨B+treeãæ§æã§ããã主ãã¼ãç¡ãã¨ãããã¨ã¯ããããªãã¯ãã
ãã¨ãçµå±å
é¨çã«ä¸»ãã¼ãä½ãããã®ã§ã主ãã¼ãè¦ããªãæ§ãªãã¼ãã«ã§ãINSERTã®è² è·è»½æ¸ã®çºã«ä¸»ãã¼ãä½ããªãã®ã¯ããã¾ãæå³ããªãããã
ã¤ã³ããã¯ã¹ã«ã¼ãã£ããªãã£
ã¦ãã¼ã¯ãªã¬ã³ã¼ããå¤ãç¨ãã«ã¼ãã£ããªãã£ãé«ããªããã«ã¼ãã£ããªãã£ãé«ãã¨ãã¤ã³ããã¯ã¹ã®å¹æãé«ããªããè¦ããã«ãéãå¤ããªãã¹ãå¤ããåºæ¥ãã°ã¦ãã¼ã¯ãªã«ã©ã ã»ã©ãã¤ã³ããã¯ã¹ã®å¹æãé«ãã
3ã¤ã®ã«ã¼ãã£ããªãã£
ãã¼ã¿ãã¼ã¹ã¾ããã§ã«ã¼ãã£ããªãã£ã¨ãæ¿åº¦ã¨ããè¨èããã©ãã©ã®æå³ã§ä½¿ããã¦ããã®ã§æ´çããã
以ä¸ã®ï¼ç¨®é¡ã®ä½¿ããæ¹ãããã1. relationã®ã«ã¼ãã£ããªãã£
ãªã¬ã¼ã·ã§ã³ä¸ã®ã¿ãã«ã®æ°ï¼ä¸æ£ç¢ºã«è¨ãã°ãã¼ãã«ä¸ã®ã¬ã³ã¼ãæ°ï¼ãã«ã¼ãã£ããªãã£ã¨ããå ´åã
ãããå義ã
Dateããã¼ã¿ãã¼ã¹ã·ã¹ãã æ¦è«ãP-90ä¸ã¤ã®çµ(tuple)ã¯è¡¨ã®ä¸ã¤ã®è¡ã«å¯¾å¿ããä¸ã¤ã®å±æ§(attribute)ã¯ä¸ã¤ã®åã«å¯¾å¿ãã¦ããã
çµã®æ°ã¯æ¿åº¦(cardinality)ã¨ãã°ãã屿§ã®æ°ã¯æ¬¡æ°(degree)ã¨ãã°ããã2. relationshipã®ã«ã¼ãã£ããªãã£
ã¨ã³ãã£ãã£éã®é¢ä¿ã1対1ã»1対å¤ã»å¤å¯¾å¤ã®ã©ãããã¨ãããã¨ãã«ã¼ãã£ããªãã£ã¨ããå ´åã3. ãã¼ã®ã«ã¼ãã£ããªãã£
ãã¼ã®å¤ã®æ°ã¨ãå ¨ã¬ã³ã¼ãä»¶æ°ã¨ã®æ¯ããã«ã¼ãã£ããªãã£ã¨ããå ´åã
æ¥æ¬èªã®ãæ¿åº¦ãã®ã¤ã¡ã¼ã¸ã«è¿ãã®ã§ãããããããããªãããã§ããªããããªãカーディナリティて何ですの - 極北データモデリングhttp://www.oracle.co.jp/interactive/Techniques/VLDB/Dss/step0302.html
ããããããç´¢å¼ã®å¹æãå·¦å³ããã®ã¯ãã«ã¼ãã£ããªãã£ãã§ãã
ãã«ã¼ãã£ããªãã£ãä½ããã¨ã¯ãç´¢å¼ãã¼ã®å¤ãè¡æ°ã«æ¯ã¹ã¦å°ãªã種é¡ã®å¤ããåããªããã¨
ãæå³ãã¾ããä¾ãã°ãæ§å¥ãã¯ãç·ãã女ãã®2種é¡ã®å¤ã®ããããã«ãªãã¾ãããããã¯æã
ã«ã¼ãã£ããªãã£ã®ä½ããã¼ã¿ã®ä¾ã ã¨ããã¾ãã
ãè¡æ°ã«æ¯è¼ãã¦å°ãªã種é¡ã®å¤ãã¨ããã¨ããããã¤ã³ãã§ããå¤ã2種é¡ãããªãã¦ããè¡æ°ã
2è¡ãããªããã°ã«ã¼ãã£ããªãã£ãä½ãã¨ã¯ããã¾ãããã¾ã1ä¸ç¨®é¡ã®å¤ãåããã¼ã¿ã§ãã
è¡æ°ãæ°åè¡ããã°ååã«ã¼ãã£ããªãã£ã¯ä½ãã¨ããã¾ãã
RDBでテーブルの作り方が良くわからなくなってきたので、いったんまとめてみた - kanonjiの日記ã§ããã¼ãã«ã®hasOneãhasManyã®é¢ä¿ã®äºãã«ã¼ãã£ããªãã£ã¨å¼ã¶ã¨æã£ã¦ãã®ã§ãã¤ã³ããã¯ã¹ã«ã¼ãã£ããªãã£ã¯æåæ··ä¹±ãã¾ãããã§ããã©ãããåè¨ã§3種é¡ã®ã«ã¼ãã£ããªãã£ãããããããã«ã¼ãã£ããªãã£ã£ã¦è¨èã«æå³æããããããã»ã»ã»
ã¤ã³ããã¯ã¹ã®æ å ±ãè¦ã
SHOW INDEX FROM `ãã¼ãã«å`;
|Table |Non_unique|Key_name|Seq_in_index|Column_name|Collation|Cardinality|Sub_part|Packed|Null|Index_type|Comment| +--------+----------+--------+------------+-----------+---------+-----------+--------+------+----+----------+-------+ |students| 0 |PRIMARY | 1 | id | A | 24964 | NULL | NULL | | BTREE | |MySQLパフォーマンスチューニングのためのインデックスの基礎知識 - 久保清隆のブログ
ãããªçµæãå¾ããããåé ç®ã®èª¬æã¯ãå¼ç¨å ã«è¡¨ãããã¾ãã
Covering Index
innodbã§å ¨è¡æ°ãCOUNT(*)ãCOUNT(id)ã§åå¾ãããã¨ããã¨ãæå¤ã«éããå¦çã«ãªããããã§ãã主ãã¼ã§æ°ããã°ãããã¦ãã®å ´åãã ã®intã ãã¦ãã¼ã¯ã ãã¤ã³ããã¯ã¹ãããããæ©ãããªå°è±¡ãããã¾ããã©ããããã¯ã©ã¹ã¿ã¼ã¤ã³ããã¯ã¹ã§ããäºãåå ã§ã主ãã¼ãæ§æããB-treeã®ãªã¼ãã«ãå®ãã¼ã¿ãå ¥ã£ã¦ããäºãããå ¨ä¸»ãã¼ã調ã¹ãã¨ããäºã¯ãã¼ãã«ã®å ¨ãã¼ã¿ãèªã¿è¾¼ãã¨ããäºã«ãªãã¿ãã*2ã§ãã
ãã®ãããªæ§é ã«ãªã£ã¦ãããã¨ã«ã¯å©ç¹ã¨æ¬ ç¹ããããã大ããªå©ç¹ã¯ä¸»ãã¼ã®å¤ã§æ¤ç´¢ãããã¨é常ã«é«éã ã¨ãããã¨ã ã主ãã¼ã®ãªã¼ããã¼ãã«ãã©ãçããã¨ãã«ã¯ãæ¢ã«ãã¼ã¿ã®ãã§ãããå®äºãã¦ããããã¼ã¿ã¨ã¤ã³ããã¯ã¹ãå¥ã ã«æ ¼ç´ããã¦ããã¿ã¤ãã®ã¹ãã¬ã¼ã¸ã¨ã³ã¸ã³ã§ã¯ãã¤ã³ããã¯ã¹ãããã¼ã¿ã®ä½ç½®ãèªã¿åã£ã¦ããã®å¾ãã¼ã¿ãã¡ã¤ã«ãããã¼ã¿ããã§ããããããã®ããã«äºæ®µéã®æä½ãå¿ è¦ã§ããã¨ããã£ãã·ã¥ãå¹ãã¦ããªãå ´åã«ã¯ä½åãªãã£ã¹ã¯I/Oãçãã¦ãã¾ãã ãããã ããã¯ã©ã¹ã¿ã¤ã³ããã¯ã¹ã«ãªã£ã¦ããã¨ãã¤ã³ããã¯ã¹ãæ¤ç´¢ããã ãã§ãã¼ã¿ããã§ããã§ããã®ã§ããã
漢(オトコ)のコンピュータ道: 知って得するInnoDBセカンダリインデックス活用術!
åãã¨ã³ããªã¼ã°ããå¼ç¨ãã¦ããã©ãããã«ããã¨ã主ãã¼ãæ¤ç´¢ããã ãã§ãã¼ã¿ããã§ããã§ãããã¨ããã¾ããã ããã大ããªå©ç¹ã¯ä¸»ãã¼ã®å¤ã§æ¤ç´¢ãããã¨é常ã«é«éãã¨ããããã ã¨æãããã®ã¨ã³ããªã¼ã§æè¨ãã¦ãªããã©ãä»¶æ°ã調ã¹ãã¨ãã«ä¸»ãã¼ã使ã£ã¦ãããã¼ã¿ããã§ãããã¦ãã¾ã£ã¦ã主ãã¼ã調ã¹ãã ãã¨ããã®ãåºæ¥ãªãã¨ããäºãªã®ããªï¼
è¦ã¯ããã« I/O ãæ¸ããããéè¦ã«ãªã£ã¦ããã¨ããããã§ããä¾ãã°ãã®ãã㪠SQL ãèãã¦ã¿ã¾ãã
SELECT hoge, fuga FROM table_1 WHERE foo = 1;æ®éã«èãã㨠[foo] ã«ã¤ã³ããã¯ã¹ãå¼µã£ã¦ããªã¼ãã§å¾ãããå¤ããä»ã®åå¤ (hoge, fuga) ãåå¾ãããã¨ãããããªãã¨ããã§ãããã ãããã§ [foo, hoge, fuga] ã¨ããè¤åã¤ã³ããã¯ã¹ãå¼µããã¨ã§ããªã¼ãã ãã§å¿ è¦ãªãã¼ã¿ãå ¨ã¦å¾ããããã®å¾ã®ã©ã³ãã ã¢ã¯ã»ã¹ãç¡ããªãããé«éã«ãªãã¾ãããã®ãããªã¤ã³ããã¯ã¹ã ãã§å®çµããã¤ã³ããã¯ã¹ã Covering Index ã¨è¨ãããã§ãã
MySQLでインデックスを使って高速化するならCovering Indexが使えそう - (゚∀゚)o彡 sasata299's blog
ã¨ããããCovering Indexã使ãã¨é«éã«ãªãå¯è½æ§ãããããããCovering Indexã¨ããã®ã¯ã¤ã³ããã¯ã¹ã ãã§å®çµããã¤ã³ããã¯ã¹ã ããã
ã¯ã©ã¹ã¿ã¤ã³ããã¯ã¹ã«ãããã»ã«ã³ããªã¤ã³ããã¯ã¹ã¯ãæªããã¨ã°ããã§ã¯ãªããããããæ¤ç´¢ãã»ã«ã³ããªã¤ã³ããã¯ã¹ã ãã§æ¸ãããã«Covering Indexã«ããã°é常ã«é«éã ããã®è¾ºã®äºæ ã«ã¤ãã¦ã¯ã過去記事「InnoDBでCOUNT()を扱う際の注意事項あれこれ。」ã«ãæ¸ãã¦ããã®ã§åç §ãã¦é ãããã
漢(オトコ)のコンピュータ道: 知って得するInnoDBセカンダリインデックス活用術!
Covering Indexã«ã¤ãã¦ã¯ãã¡ãã£ã¨è¤éã§å¼ç¨ããã®ã«ã¡ããã©è¯ãæéã®ã¨ã³ããªã¼ãè¦å½ãããªãã£ããã©ãä¸è¨2ã¤ã®å¼ç¨å ãåãããããã§ãã
Covering Indexã使ãã«ã¯ã»ã«ã³ããªã¤ã³ããã¯ã¹ã使ãã®ã§ãCOUNTãæ©ããªã£ã¦ãæ´æ°å¦çãéã«é ããªãããç¥ããªãã
SHOW ENGINE INNODB STATUS 㨠InnoDBã¢ãã¿ãinnodbãã¼ãã«ã¢ãã¿
InnoDB 㯠InnoDB å é¨ã®ç¶æ ã«ã¤ãã¦ã®æ å ±ãããªã³ããã InnoDB ã¢ãã¿ãå«ãã§ãã¾ãããèªåã® SQL ã¯ã©ã¤ã¢ã³ãã«ã¹ã¿ã³ãã¼ã InnoDB ã¢ãã¿ã®ã¢ã¦ããããããã§ããããçºã«ããã¤ã§ã SHOW ENGINE INNODB STATUS SQL ã¹ãã¼ãã¡ã³ããå©ç¨ããäºãã§ãã¾ãã ãã®æ å ±ã¯æ§è½èª¿æ´ãããããã§å½¹ç«ã¡ã¾ãã
http://dev.mysql.com/doc/refman/5.1/ja/innodb-monitor.html
SHOW ENGINE INNODB STATUS\G
innodbã®å 鍿 å ±ãç¥ãããã®ã¯ã¨ãªã¼ã¨ãinnodbã¢ãã¿ãinnodbãã¼ãã«ã¢ãã¿ã¨ããæ©è½ãããã¾ãã
æ¸ããæ¥
2011-12-19
ä¾ã«ãã£ã¦ä¸æ¸ãã®ã¾ã¾æ¾ç½®ãã¦ããçãªãã ãã©ããããæ¸ããè¨æ¶ãç¡ãã£ã¦æ®éã«èªãã§ãã¾ã£ãã
ä»ã®ä¸æ¸ãã¯ãä¸å¿æ¸ããã£ã¦äºãããã¯è¦ãã¦ããã ãã©ãªãã
èªåã§èªãã§ã¦ãå
¨ä¸»ãã¼ã調ã¹ãã¨ããäºã¯ãã¼ãã«ã®å
¨ãã¼ã¿ãèªã¿è¾¼ãã¨ããäºãã®æ ¹æ ãç¡ãã¦æ°ã«ãªã£ãã®ã§ãã¡ãã£ã¨å çãã¾ããã