±à¼ÍƼö: |
±¾ÎÄ´óÖ½éÉÜÁË
Mysql µÄ¼Ü¹¹¡¢´æ´¢¡¢Ë÷Òý¡¢ËøµÈºÍ InnoDB´æ´¢ÒýÇæ¼°ºÎÈç´æ´¢µÈÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£
|
|
×÷ΪһÃû¿ª·¢ÈËÔ±£¬ÔÚÈÕ³£µÄ¹¤×÷ÖлáÄÑÒÔ±ÜÃâµØ½Ó´¥µ½Êý¾Ý¿â£¬ÎÞÂÛÊÇ»ùÓÚÎļþµÄ
sqlite »¹Êǹ¤³ÌÉÏʹÓ÷dz£¹ã·ºµÄ MySQL¡¢PostgreSQL£¬µ«ÊÇÒ»Ö±ÒÔÀ´Ò²Ã»ÓжÔÊý¾Ý¿âÓÐÒ»¸ö·Ç³£ÇåÎú²¢ÇÒ³ÉÌåϵµÄÈÏÖª£¬ËùÒÔ×î½üÁ½¸öÔµÄʱ¼ä¿´Á˼¸±¾Êý¾Ý¿âÏà¹ØµÄÊé¼®²¢ÇÒÔĶÁÁË
MySQL µÄ¹Ù·½Îĵµ£¬Ï£Íû¶Ô¸÷λÁ˽âÊý¾Ý¿âµÄ¡¢²»Á˽âÊý¾Ý¿âµÄÓÐËù°ïÖú¡£

±¾ÎÄÖжÔÓÚÊý¾Ý¿âµÄ½éÉÜÒÔ¼°Ñо¿¶¼ÊÇÔÚ MySQL ÉϽøÐеģ¬Èç¹ûÉæ¼°µ½ÁËÆäËûÊý¾Ý¿âµÄÄÚÈÝ»òÕßʵÏÖ»áÔÚÎÄÖе¥¶ÀÖ¸³ö¡£
Êý¾Ý¿âµÄ¶¨Òå
ºÜ¶à¿ª·¢ÕßÔÚ×ʼʱÆäʵ¶¼¶ÔÊý¾Ý¿âÓÐÒ»¸ö±È½ÏÄ£ºýµÄÈÏʶ£¬¾õµÃÊý¾Ý¿â¾ÍÊÇÒ»¶ÑÊý¾ÝµÄ¼¯ºÏ£¬µ«ÊÇʵ¼ÊÈ´±ÈÕ⸴ÔӵĶ࣬Êý¾Ý¿âÁìÓòÖÐÓÐÁ½¸ö´Ê·Ç³£ÈÝÒ×»ìÏý£¬Ò²¾ÍÊÇÊý¾Ý¿âºÍʵÀý£º
Êý¾Ý¿â£ºÎïÀí²Ù×÷Îļþϵͳ»òÆäËûÐÎʽÎļþÀàÐ͵ļ¯ºÏ£»
ʵÀý£ºMySQL Êý¾Ý¿âÓɺǫ́Ïß³ÌÒÔ¼°Ò»¸ö¹²ÏíÄÚ´æÇø×é³É£»
¶ÔÓÚÊý¾Ý¿âºÍʵÀýµÄ¶¨Òå¶¼À´×ÔÓÚ MySQL ¼¼ÊõÄÚÄ»£ºInnoDB ´æ´¢ÒýÇæÒ»Ê飬ÏëÒªÁ˽â InnoDB
´æ´¢ÒýÇæµÄ¶ÁÕß¿ÉÒÔÔĶÁÕâ±¾Êé¼®¡£
Êý¾Ý¿âºÍʵÀý
ÔÚ MySQL ÖУ¬ÊµÀýºÍÊý¾Ý¿âÍùÍù¶¼ÊÇÒ»Ò»¶ÔÓ¦µÄ£¬¶øÎÒÃÇÒ²ÎÞ·¨Ö±½Ó²Ù×÷Êý¾Ý¿â£¬¶øÊÇҪͨ¹ýÊý¾Ý¿âʵÀýÀ´²Ù×÷Êý¾Ý¿âÎļþ£¬¿ÉÒÔÀí½âΪÊý¾Ý¿âʵÀýÊÇÊý¾Ý¿âΪÉϲãÌṩµÄÒ»¸öרÃÅÓÃÓÚ²Ù×÷µÄ½Ó¿Ú¡£
ÔÚ Unix ÉÏ£¬Æô¶¯Ò»¸ö MySQL ʵÀýÍùÍù»á²úÉúÁ½¸ö½ø³Ì£¬ mysqld¾ÍÊÇÕæÕýµÄÊý¾Ý¿â·þÎñÊØ»¤½ø³Ì£¬¶ø
mysqld_safeÊÇÒ»¸öÓÃÓÚ¼ì²éºÍÉèÖà mysqldÆô¶¯µÄ¿ØÖƳÌÐò£¬Ëü¸ºÔð¼à¿Ø MySQL ½ø³ÌµÄÖ´ÐУ¬µ±
mysqld·¢Éú´íÎóʱ£¬ mysqld_safe»á¶ÔÆä״̬½øÐмì²é²¢ÔÚºÏÊʵÄÌõ¼þÏÂÖØÆô¡£

ÔÚ Unix ÉÏ£¬Æô¶¯Ò»¸ö MySQL ʵÀýÍùÍù»á²úÉúÁ½¸ö½ø³Ì£¬ mysqld¾ÍÊÇÕæÕýµÄÊý¾Ý¿â·þÎñÊØ»¤½ø³Ì£¬¶ø
mysqld_safeÊÇÒ»¸öÓÃÓÚ¼ì²éºÍÉèÖà mysqldÆô¶¯µÄ¿ØÖƳÌÐò£¬Ëü¸ºÔð¼à¿Ø MySQL ½ø³ÌµÄÖ´ÐУ¬µ±
mysqld·¢Éú´íÎóʱ£¬ mysqld_safe»á¶ÔÆä״̬½øÐмì²é²¢ÔÚºÏÊʵÄÌõ¼þÏÂÖØÆô¡£
MySQL µÄ¼Ü¹¹
MySQL ´ÓµÚÒ»¸ö°æ±¾·¢²¼µ½ÏÖÔÚÒѾÓÐÁË 20 ¶àÄêµÄÀúÊ·£¬ÔÚÕâô¶àÄêµÄ·¢Õ¹ºÍÑݱäÖУ¬Õû¸öÓ¦ÓõÄÌåϵ½á¹¹±äµÃÔ½À´Ô½¸´ÔÓ£º

×îÉϲãÓÃÓÚÁ¬½Ó¡¢Ï̴߳¦ÀíµÄ²¿·Ö²¢²»ÊÇ MySQL ¡º·¢Ã÷¡»µÄ£¬ºÜ¶à·þÎñ¶¼ÓÐÀàËÆµÄ×é³É²¿·Ö£»µÚ¶þ²ãÖаüº¬ÁË´ó¶àÊý
MySQL µÄºËÐÄ·þÎñ£¬°üÀ¨ÁË¶Ô SQL µÄ½âÎö¡¢·ÖÎö¡¢ÓÅ»¯ºÍ»º´æµÈ¹¦ÄÜ£¬´æ´¢¹ý³Ì¡¢´¥·¢Æ÷ºÍÊÓͼ¶¼ÊÇÔÚÕâÀïʵÏֵģ»¶øµÚÈý²ã¾ÍÊÇ
MySQL ÖÐÕæÕý¸ºÔðÊý¾ÝµÄ´æ´¢ºÍÌáÈ¡µÄ´æ´¢ÒýÇæ£¬ÀýÈ磺InnoDB¡¢MyISAMµÈ£¬ÎÄÖжԴ洢ÒýÇæµÄ½éÉܶ¼ÊǶÔ
InnoDB ʵÏֵķÖÎö¡£
Êý¾ÝµÄ´æ´¢
ÔÚÕû¸öÊý¾Ý¿âÌåϵ½á¹¹ÖУ¬ÎÒÃÇ¿ÉÒÔʹÓò»Í¬µÄ´æ´¢ÒýÇæÀ´´æ´¢Êý¾Ý£¬¶ø¾ø´ó¶àÊý´æ´¢ÒýÇæ¶¼ÒÔ¶þ½øÖƵÄÐÎʽ´æ´¢Êý¾Ý£»ÕâÒ»½Ú»á½éÉÜ
InnoDB ÖжÔÊý¾ÝÊÇÈçºÎ´æ´¢µÄ¡£
ÔÚ InnoDB ´æ´¢ÒýÇæÖУ¬ËùÓеÄÊý¾Ý¶¼±»Âß¼µØ´æ·ÅÔÚ±í¿Õ¼äÖУ¬±í¿Õ¼ä£¨tablespace£©ÊÇ´æ´¢ÒýÇæÖÐ×î¸ßµÄ´æ´¢Âß¼µ¥Î»£¬ÔÚ±í¿Õ¼äµÄÏÂÃæÓÖ°üÀ¨¶Î£¨segment£©¡¢Çø£¨extent£©¡¢Ò³£¨page£©£º

ͬһ¸öÊý¾Ý¿âʵÀýµÄËùÓбí¿Õ¼ä¶¼ÓÐÏàͬµÄÒ³´óС£»Ä¬ÈÏÇé¿öÏ£¬±í¿Õ¼äÖеÄÒ³´óС¶¼Îª 16KB£¬µ±È»Ò²¿ÉÒÔͨ¹ý¸Ä±ä
innodb_page_sizeÑ¡Ïî¶ÔĬÈÏ´óС½øÐÐÐ޸ģ¬ÐèҪעÒâµÄÊDz»Í¬µÄÒ³´óС×îÖÕÒ²»áµ¼ÖÂÇø´óСµÄ²»Í¬£º

´ÓͼÖпÉÒÔ¿´³ö£¬ÔÚ InnoDB ´æ´¢ÒýÇæÖУ¬Ò»¸öÇøµÄ´óС×îСΪ 1MB£¬Ò³µÄÊýÁ¿×îÉÙΪ 64 ¸ö¡£
ÈçºÎ´æ´¢±í
MySQL ʹÓà InnoDB ´æ´¢±íʱ£¬»á½«±íµÄ¶¨ÒåºÍÊý¾ÝË÷ÒýµÈÐÅÏ¢·Ö¿ª´æ´¢£¬ÆäÖÐǰÕß´æ´¢ÔÚ .frmÎļþÖУ¬ºóÕß´æ´¢ÔÚ
.ibdÎļþÖУ¬ÕâÒ»½Ú¾Í»á¶ÔÕâÁ½ÖÖ²»Í¬µÄÎļþ·Ö±ð½øÐнéÉÜ¡£

.frm Îļþ
ÎÞÂÛÔÚ MySQL ÖÐÑ¡ÔñÁËÄĸö´æ´¢ÒýÇæ£¬ËùÓÐµÄ MySQL ±í¶¼»áÔÚÓ²ÅÌÉÏ´´½¨Ò»¸ö .frmÎļþÓÃÀ´ÃèÊö±íµÄ¸ñʽ»òÕß˵¶¨Ò壻
.frmÎļþµÄ¸ñʽÔÚ²»Í¬µÄƽ̨É϶¼ÊÇÏàͬµÄ¡£
CREATE TABLE test_frm(
column1 CHAR(5),
column2 INTEGER
);
µ±ÎÒÃÇʹÓÃÉÏÃæµÄ´úÂë´´½¨±íʱ£¬»áÔÚ´ÅÅÌÉ쵀 datadirÎļþ¼ÐÖÐÉú³ÉÒ»¸ö test_frm.frmµÄÎļþ£¬Õâ¸öÎļþÖоͰüº¬Á˱í½á¹¹Ïà¹ØµÄÐÅÏ¢£º

MySQL ¹Ù·½ÎĵµÖÐµÄ 11.1 MySQL .frm File FormatÒ»ÎĶÔÓÚ .frmÎļþ¸ñʽÖеĶþ½øÖƵÄÄÚÈÝÓÐ×ŷdz£ÏêϸµÄ±íÊö£¬ÔÚÕâÀï¾Í²»Õ¹¿ª½éÉÜÁË¡£
.ibd Îļþ
InnoDB ÖÐÓÃÓÚ´æ´¢Êý¾ÝµÄÎļþ×ܹ²ÓÐÁ½¸ö²¿·Ö£¬Ò»ÊÇϵͳ±í¿Õ¼äÎļþ£¬°üÀ¨ ibdata1¡¢ ibdata2µÈÎļþ£¬ÆäÖд洢ÁË
InnoDB ϵͳÐÅÏ¢ºÍÓû§Êý¾Ý¿â±íÊý¾ÝºÍË÷Òý£¬ÊÇËùÓÐ±í¹«Óõġ£
µ±´ò¿ª innodb_file_per_tableÑ¡Ïîʱ£¬ .ibdÎļþ¾ÍÊÇÿһ¸ö±í¶ÀÓеıí¿Õ¼ä£¬Îļþ´æ´¢Á˵±Ç°±íµÄÊý¾ÝºÍÏà¹ØµÄË÷ÒýÊý¾Ý¡£
ÈçºÎ´æ´¢¼Ç¼
ÓëÏÖÓеĴó¶àÊý´æ´¢ÒýÇæÒ»Ñù£¬InnoDB ʹÓÃÒ³×÷Ϊ´ÅÅ̹ÜÀíµÄ×îСµ¥Î»£»Êý¾ÝÔÚ InnoDB ´æ´¢ÒýÇæÖж¼Êǰ´Ðд洢µÄ£¬Ã¿¸ö
16KB ´óСµÄÒ³ÖпÉÒÔ´æ·Å 2-200 ÐеļǼ¡£
µ± InnoDB ´æ´¢Êý¾Ýʱ£¬Ëü¿ÉÒÔʹÓò»Í¬µÄÐиñʽ½øÐд洢£»MySQL 5.7 °æ±¾Ö§³ÖÒÔϸñʽµÄÐд洢·½Ê½£º

Antelope ÊÇ InnoDB ×ʼ֧³ÖµÄÎļþ¸ñʽ£¬Ëü°üº¬Á½ÖÖÐиñʽ Compact ºÍ Redundant£¬Ëü×ʼ²¢Ã»ÓÐÃû×Ö£»Antelope
µÄÃû×ÖÊÇÔÚеÄÎļþ¸ñʽ Barracuda ³öÏÖºó²ÅÆðµÄ£¬Barracuda µÄ³öÏÖÒýÈëÁËÁ½ÖÖеÄÐиñʽ
Compressed ºÍ Dynamic£»InnoDB ¶ÔÓÚÎļþ¸ñʽ¶¼»áÏòǰ¼æÈÝ£¬¶ø¹Ù·½ÎĵµÖÐÒ²¶ÔÖ®ºó»á³öÏÖµÄÐÂÎļþ¸ñʽԤÏȶ¨ÒåºÃÁËÃû×Ö£ºCheetah¡¢Dragon¡¢Elk
µÈµÈ¡£
Á½ÖÖÐмǼ¸ñʽ Compact ºÍ Redundant ÔÚ´ÅÅÌÉϰ´ÕÕÒÔÏ·½Ê½´æ´¢£º

Compact ºÍ Redundant ¸ñʽ×î´óµÄ²»Í¬¾ÍÊǼǼ¸ñʽµÄµÚÒ»¸ö²¿·Ö£»ÔÚ Compact
ÖУ¬ÐмǼµÄµÚÒ»²¿·Öµ¹Ðò´æ·ÅÁËÒ»ÐÐÊý¾ÝÖÐÁеij¤¶È£¨Length£©£¬¶ø Redundant ÖдæµÄÊÇÿһÁÐµÄÆ«ÒÆÁ¿£¨Offset£©£¬´Ó×ÜÌåÉÏÉÏ¿´£¬Compact
ÐмǼ¸ñʽÏà±È Redundant ¸ñʽÄܹ»¼õÉÙ 20% µÄ´æ´¢¿Õ¼ä¡£
ÐÐÒç³öÊý¾Ý
µ± InnoDB ʹÓà Compact »òÕß Redundant ¸ñʽ´æ´¢¼«³¤µÄ VARCHAR
»òÕß BLOB ÕâÀà´ó¶ÔÏóʱ£¬ÎÒÃDz¢²»»áÖ±½Ó½«ËùÓеÄÄÚÈݶ¼´æ·ÅÔÚÊý¾ÝÒ³½ÚµãÖУ¬¶øÊǽ«ÐÐÊý¾ÝÖеÄǰ 768
¸ö×Ö½Ú´æ´¢ÔÚÊý¾ÝÒ³ÖУ¬ºóÃæ»áͨ¹ýÆ«ÒÆÁ¿Ö¸ÏòÒç³öÒ³¡£

µ«Êǵ±ÎÒÃÇʹÓÃеÄÐмǼ¸ñʽ Compressed »òÕß Dynamic ʱ¶¼Ö»»áÔÚÐмǼÖб£´æ
20 ¸ö×Ö½ÚµÄÖ¸Õ룬ʵ¼ÊµÄÊý¾Ý¶¼»á´æ·ÅÔÚÒç³öÒ³ÃæÖС£
µ±È»ÔÚʵ¼Ê´æ´¢ÖУ¬¿ÉÄÜ»á¶Ô²»Í¬³¤¶ÈµÄ TEXT ºÍ BLOB ÁнøÐÐÓÅ»¯£¬²»¹ýÕâ¾Í²»ÊDZ¾ÎĹØ×¢µÄÖØµãÁË¡£
ÏëÒªÁ˽â¸ü¶àÓë InnoDB ´æ´¢ÒýÇæÖмǼµÄÊý¾Ý¸ñʽµÄÏà¹ØÐÅÏ¢£¬¿ÉÒÔÔĶÁ InnoDB Record
Structure
Êý¾ÝÒ³½á¹¹
Ò³ÊÇ InnoDB ´æ´¢ÒýÇæ¹ÜÀíÊý¾ÝµÄ×îС´ÅÅ̵¥Î»£¬¶ø B-Tree ½Úµã¾ÍÊÇʵ¼Ê´æ·Å±íÖÐÊý¾ÝµÄÒ³Ãæ£¬ÎÒÃÇÔÚÕâÀォҪ½éÉÜÒ³ÊÇÈçºÎ×éÖ¯ºÍ´æ´¢¼Ç¼µÄ£»Ê×ÏÈ£¬Ò»¸ö
InnoDB Ò³ÓÐÒÔÏÂÆß¸ö²¿·Ö£º

ÿһ¸öÒ³Öаüº¬ÁËÁ½¶Ô header/trailer£ºÄÚ²¿µÄ Page Header/Page Directory
¹ØÐĵÄÊÇÒ³µÄ״̬ÐÅÏ¢£¬¶ø Fil Header/Fil Trailer ¹ØÐĵÄÊǼǼҳµÄÍ·ÐÅÏ¢¡£
ÔÚÒ³µÄÍ·²¿ºÍβ²¿Ö®¼ä¾ÍÊÇÓû§¼Ç¼ºÍ¿ÕÏпռäÁË£¬Ã¿Ò»¸öÊý¾ÝÒ³Öж¼°üº¬ Infimum ºÍ Supremum
ÕâÁ½¸öÐéÄâµÄ¼Ç¼£¨¿ÉÒÔÀí½âΪռλ·û£©£¬Infimum ¼Ç¼ÊDZȸÃÒ³ÖÐÈκÎÖ÷¼üÖµ¶¼ÒªÐ¡µÄÖµ£¬Supremum
ÊǸÃÒ³ÖеÄ×î´óÖµ£º

User Records ¾ÍÊÇÕû¸öÒ³ÃæÖÐÕæÕýÓÃÓÚ´æ·ÅÐмǼµÄ²¿·Ö£¬¶ø Free Space ¾ÍÊÇ¿ÕÓà¿Õ¼äÁË£¬ËüÊÇÒ»¸öÁ´±íµÄÊý¾Ý½á¹¹£¬ÎªÁ˱£Ö¤²åÈëºÍɾ³ýµÄЧÂÊ£¬Õû¸öÒ³Ãæ²¢²»»á°´ÕÕÖ÷¼ü˳Ðò¶ÔËùÓмǼ½øÐÐÅÅÐò£¬Ëü»á×Ô¶¯´Ó×ó²àÏòÓÒѰÕÒ¿Õ°×½Úµã½øÐвåÈ룬ÐмǼÔÚÎïÀí´æ´¢Éϲ¢²»Êǰ´ÕÕ˳ÐòµÄ£¬ËüÃÇÖ®¼äµÄ˳ÐòÊÇÓÉ
next_recordÕâÒ»Ö¸Õë¿ØÖÆµÄ¡£
B+ Ê÷ÔÚ²éÕÒ¶ÔÓ¦µÄ¼Ç¼ʱ£¬²¢²»»áÖ±½Ó´ÓÊ÷ÖÐÕÒ³ö¶ÔÓ¦µÄÐмǼ£¬ËüÖ»ÄÜ»ñÈ¡¼Ç¼ËùÔÚµÄÒ³£¬½«Õû¸öÒ³¼ÓÔØµ½ÄÚ´æÖУ¬ÔÙͨ¹ý
Page Directory Öд洢µÄÏ¡ÊèË÷ÒýºÍ n_owned¡¢ next_recordÊôÐÔÈ¡³ö¶ÔÓ¦µÄ¼Ç¼£¬²»¹ýÒòΪÕâÒ»²Ù×÷ÊÇÔÚÄÚ´æÖнøÐеģ¬ËùÒÔͨ³£»áºöÂÔÕⲿ·Ö²éÕҵĺÄʱ¡£
InnoDB ´æ´¢ÒýÇæÖжÔÊý¾ÝµÄ´æ´¢ÊÇÒ»¸ö·Ç³£¸´ÔӵϰÌ⣬ÕâÒ»½ÚÖÐÒ²Ö»ÊÇ¶Ô±í¡¢ÐмǼÒÔ¼°Ò³ÃæµÄ´æ´¢½øÐÐÒ»¶¨µÄ·ÖÎöºÍ½éÉÜ£¬ËäÈ»×÷ÕßÏàÐÅÕⲿ·Ö֪ʶ¶ÔÓڴ󲿷ֿª·¢ÕßÒѾ×ã¹»ÁË£¬µ«ÊÇÏëÒªÕæÕýÏû»¯Õⲿ·ÖÄÚÈÝ»¹ÐèÒªºÜ¶àµÄŬÁ¦ºÍʵ¼ù¡£
Ë÷Òý
Ë÷ÒýÊÇÊý¾Ý¿âÖзdz£·Ç³£ÖØÒªµÄ¸ÅÄËüÊÇ´æ´¢ÒýÇæÄܹ»¿ìËÙ¶¨Î»¼Ç¼µÄÃØÃÜÎäÆ÷£¬¶ÔÓÚÌáÉýÊý¾Ý¿âµÄÐÔÄÜ¡¢¼õÇáÊý¾Ý¿â·þÎñÆ÷µÄ¸ºµ£ÓÐ×ŷdz£ÖØÒªµÄ×÷Óã»Ë÷ÒýÓÅ»¯ÊǶԲéѯÐÔÄÜÓÅ»¯µÄ×îÓÐЧÊֶΣ¬ËüÄܹ»ÇáËɵؽ«²éѯµÄÐÔÄÜÌá¸ß¼¸¸öÊýÁ¿¼¶¡£
Ë÷ÒýµÄÊý¾Ý½á¹¹
ÔÚÉÏÒ»½ÚÖУ¬ÎÒÃÇ̸ÁËÐмǼµÄ´æ´¢ºÍÒ³µÄ´æ´¢£¬ÔÚÕâÀïÎÒÃǾÍÒª´Ó¸ü¸ßµÄ²ãÃæ¿´ InnoDB ÖжÔÓÚÊý¾ÝÊÇÈçºÎ´æ´¢µÄ£»InnoDB
´æ´¢ÒýÇæÔÚ¾ø´ó¶àÊýÇé¿öÏÂʹÓà B+ Ê÷½¨Á¢Ë÷Òý£¬ÕâÊǹØÏµÐÍÊý¾Ý¿âÖвéÕÒ×îΪ³£ÓúÍÓÐЧµÄË÷Òý£¬µ«ÊÇ B+
Ê÷Ë÷Òý²¢²»ÄÜÕÒµ½Ò»¸ö¸ø¶¨¼ü¶ÔÓ¦µÄ¾ßÌåÖµ£¬ËüÖ»ÄÜÕÒµ½Êý¾ÝÐжÔÓ¦µÄÒ³£¬È»ºóÕýÈçÉÏÒ»½ÚËùÌáµ½µÄ£¬Êý¾Ý¿â°ÑÕû¸öÒ³¶ÁÈëµ½ÄÚ´æÖУ¬²¢ÔÚÄÚ´æÖвéÕÒ¾ßÌåµÄÊý¾ÝÐС£

B+ Ê÷ÊÇÆ½ºâÊ÷£¬Ëü²éÕÒÈÎÒâ½ÚµãËùºÄ·ÑµÄʱ¼ä¶¼ÊÇÍêÈ«ÏàͬµÄ£¬±È½ÏµÄ´ÎÊý¾ÍÊÇ B+ Ê÷µÄ¸ß¶È£»ÔÚÕâÀÎÒÃDz¢²»»áÉîÈë·ÖÎö»òÕß¶¯ÊÖʵÏÖÒ»¸ö
B+ Ê÷£¬Ö»ÊǶÔËüµÄÌØÐÔ½øÐмòµ¥µÄ½éÉÜ¡£
¾Û¼¯Ë÷ÒýºÍ¸¨ÖúË÷Òý
Êý¾Ý¿âÖÐµÄ B+ Ê÷Ë÷Òý¿ÉÒÔ·ÖΪ¾Û¼¯Ë÷Òý£¨clustered index£©ºÍ¸¨ÖúË÷Òý£¨secondary
index£©£¬ËüÃÇÖ®¼äµÄ×î´óÇø±ð¾ÍÊÇ£¬¾Û¼¯Ë÷ÒýÖдæ·Å×ÅÒ»ÌõÐмǼµÄÈ«²¿ÐÅÏ¢£¬¶ø¸¨ÖúË÷ÒýÖÐÖ»°üº¬Ë÷ÒýÁкÍÒ»¸öÓÃÓÚ²éÕÒ¶ÔÓ¦ÐмǼµÄ¡ºÊéÇ©¡»¡£
Ë÷ÒýµÄÉè¼Æ
Ë÷ÒýµÄÉè¼ÆÆäʵÊÇÒ»¸ö·Ç³£ÖØÒªµÄÄÚÈÝ£¬Í¬Ê±Ò²ÊÇÒ»¸ö·Ç³£¸´ÔÓµÄÄÚÈÝ£»Ë÷ÒýµÄÉè¼ÆÓë´´½¨¶ÔÓÚÌáÉýÊý¾Ý¿âµÄ²éѯÐÔÄÜÖÁ¹ØÖØÒª£¬²»¹ýÕâ²»ÊDZ¾ÎÄÏëÒª½éÉܵÄÄÚÈÝ£¬ÓйØË÷ÒýµÄÉè¼ÆÓëÓÅ»¯¿ÉÒÔÔĶÁ
Êý¾Ý¿âË÷ÒýÉè¼ÆÓëÓÅ»¯Ò»Ê飬ÊéÖÐÌṩÁËÒ»Öַdz£¿ÆÑ§ºÏÀíµÄ·½·¨Äܹ»°ïÖúÎÒÃÇÔÚÊý¾Ý¿âÖн¨Á¢×îÊʺϵÄË÷Òý£¬µ±È»×÷ÕßÒ²¿ÉÄÜ»áÔÚÖ®ºóµÄÎÄÕÂÖжÔË÷ÒýµÄÉè¼Æ½øÐмòµ¥µÄ½éÉܺͷÖÎö¡£
Ëø
ÎÒÃǶ¼ÖªµÀËøµÄÖÖÀàÒ»°ã·ÖΪÀÖ¹ÛËøºÍ±¯¹ÛËøÁ½ÖÖ£¬InnoDB ´æ´¢ÒýÇæÖÐʹÓõľÍÊDZ¯¹ÛËø£¬¶ø°´ÕÕËøµÄÁ£¶È»®·Ö£¬Ò²¿ÉÒÔ·Ö³ÉÐÐËøºÍ±íËø¡£
²¢·¢¿ØÖÆ»úÖÆ
ÀÖ¹ÛËøºÍ±¯¹ÛËøÆäʵ¶¼ÊDz¢·¢¿ØÖƵĻúÖÆ£¬Í¬Ê±ËüÃÇÔÚÔÀíÉϾÍÓÐ×ű¾ÖʵIJî±ð£»
ÀÖ¹ÛËøÊÇÒ»ÖÖ˼Ï룬ËüÆäʵ²¢²»ÊÇÒ»ÖÖÕæÕýµÄ¡ºËø¡»£¬Ëü»áÏȳ¢ÊÔ¶Ô×ÊÔ´½øÐÐÐ޸ģ¬ÔÚд»ØÊ±ÅжÏ×ÊÔ´ÊÇ·ñ½øÐÐÁ˸ı䣬Èç¹ûûÓз¢Éú¸Ä±ä¾Í»áд»Ø£¬·ñÔò¾Í»á½øÐÐÖØÊÔ£¬ÔÚÕû¸öµÄÖ´Ðйý³ÌÖÐÆäʵ¶¼Ã»ÓжÔÊý¾Ý¿â½øÐмÓËø£»
±¯¹ÛËø¾ÍÊÇÒ»ÖÖÕæÕýµÄËøÁË£¬Ëü»áÔÚ»ñÈ¡×ÊԴǰ¶Ô×ÊÔ´½øÐмÓËø£¬È·±£Í¬Ò»Ê±¿ÌÖ»ÓÐÓÐÏÞµÄÏß³ÌÄܹ»·ÃÎʸÃ×ÊÔ´£¬ÆäËûÏëÒª³¢ÊÔ»ñÈ¡×ÊÔ´µÄ²Ù×÷¶¼»á½øÈëµÈ´ý״̬£¬Ö±µ½¸ÃÏß³ÌÍê³ÉÁ˶Ô×ÊÔ´µÄ²Ù×÷²¢ÇÒÊÍ·ÅÁËËøºó£¬ÆäËûÏ̲߳ÅÄÜÖØÐ²Ù×÷×ÊÔ´£»
ËäÈ»ÀÖ¹ÛËøºÍ±¯¹ÛËøÔÚ±¾ÖÊÉϲ¢²»ÊÇͬһÖÖ¶«Î÷£¬Ò»¸öÊÇÒ»ÖÖ˼Ï룬ÁíÒ»¸öÊÇÒ»ÖÖÕæÕýµÄËø£¬µ«ÊÇËüÃǶ¼ÊÇÒ»ÖÖ²¢·¢¿ØÖÆ»úÖÆ¡£

ÀÖ¹ÛËø²»»á´æÔÚËÀËøµÄÎÊÌ⣬µ«ÊÇÓÉÓÚ¸üкóÑéÖ¤£¬ËùÒÔµ±³åͻƵÂʺÍÖØÊԳɱ¾½Ï¸ßʱ¸üÍÆ¼öʹÓñ¯¹ÛËø£¬¶øÐèÒª·Ç³£¸ßµÄÏìÓ¦ËٶȲ¢ÇÒ²¢·¢Á¿·Ç³£´óµÄʱºòʹÓÃÀÖ¹ÛËø¾ÍÄܽϺõĽâ¾öÎÊÌ⣬ÔÚÕâʱʹÓñ¯¹ÛËø¾Í¿ÉÄܳöÏÖÑÏÖØµÄÐÔÄÜÎÊÌ⣻ÔÚÑ¡Ôñ²¢·¢¿ØÖÆ»úÖÆÊ±£¬ÐèÒª×ۺϿ¼ÂÇÉÏÃæµÄËĸö·½Ã棨³åͻƵÂÊ¡¢ÖØÊԳɱ¾¡¢ÏìÓ¦ËٶȺͲ¢·¢Á¿£©½øÐÐÑ¡Ôñ¡£
ËøµÄÖÖÀà
¶ÔÊý¾ÝµÄ²Ù×÷ÆäʵֻÓÐÁ½ÖÖ£¬Ò²¾ÍÊǶÁºÍд£¬¶øÊý¾Ý¿âÔÚʵÏÖËøÊ±£¬Ò²»á¶ÔÕâÁ½ÖÖ²Ù×÷ʹÓò»Í¬µÄËø£»InnoDB
ʵÏÖÁ˱ê×¼µÄÐм¶Ëø£¬Ò²¾ÍÊǹ²ÏíËø£¨Shared Lock£©ºÍ»¥³âËø£¨Exclusive Lock£©£»¹²ÏíËøºÍ»¥³âËøµÄ×÷ÓÃÆäʵ·Ç³£ºÃÀí½â£º
¹²ÏíËø£¨¶ÁËø£©£ºÔÊÐíÊÂÎñ¶ÔÒ»ÌõÐÐÊý¾Ý½øÐжÁÈ¡£»
»¥³âËø£¨Ð´Ëø£©£ºÔÊÐíÊÂÎñ¶ÔÒ»ÌõÐÐÊý¾Ý½øÐÐɾ³ý»ò¸üУ»
¶øËüÃǵÄÃû×ÖÒ²°µÊ¾×Ÿ÷×ÔµÄÁíÍâÒ»¸öÌØÐÔ£¬¹²ÏíËøÖ®¼äÊǼæÈݵ쬶ø»¥³âËøÓëÆäËûÈÎÒâËø¶¼²»¼æÈÝ£º

ÉÔ΢¶ÔËüÃǵÄʹÓýøÐÐ˼¿¼¾ÍÄÜÏëÃ÷°×ËüÃÇΪʲôҪÕâôÉè¼Æ£¬ÒòΪ¹²ÏíËø´ú±íÁ˶Á²Ù×÷¡¢»¥³âËø´ú±íÁËд²Ù×÷£¬ËùÒÔÎÒÃÇ¿ÉÒÔÔÚÊý¾Ý¿âÖв¢ÐжÁ£¬µ«ÊÇÖ»ÄÜ´®ÐÐд£¬Ö»ÓÐÕâÑù²ÅÄܱ£Ö¤²»»á·¢ÉúÏ߳̾ºÕù£¬ÊµÏÖḬ̈߳²È«¡£
ËøµÄÁ£¶È
ÎÞÂÛÊǹ²ÏíËø»¹ÊÇ»¥³âËøÆäʵ¶¼Ö»ÊǶÔijһ¸öÊý¾ÝÐнøÐмÓËø£¬InnoDB Ö§³Ö¶àÖÖÁ£¶ÈµÄËø£¬Ò²¾ÍÊÇÐÐËøºÍ±íËø£»ÎªÁËÖ§³Ö¶àÁ£¶ÈËø¶¨£¬InnoDB
´æ´¢ÒýÇæÒýÈëÁËÒâÏòËø£¨Intention Lock£©£¬ÒâÏòËø¾ÍÊÇÒ»ÖÖ±í¼¶Ëø¡£
ÓëÉÏÒ»½ÚÖÐÌáµ½µÄÁ½ÖÖËøµÄÖÖÀàÏàËÆµÄÊÇ£¬ÒâÏòËøÒ²·ÖΪÁ½ÖÖ£º
ÒâÏò¹²ÏíËø£ºÊÂÎñÏëÒªÔÚ»ñµÃ±íÖÐijЩ¼Ç¼µÄ¹²ÏíËø£¬ÐèÒªÔÚ±íÉÏÏȼÓÒâÏò¹²ÏíËø£»
ÒâÏò»¥³âËø£ºÊÂÎñÏëÒªÔÚ»ñµÃ±íÖÐijЩ¼Ç¼µÄ»¥³âËø£¬ÐèÒªÔÚ±íÉÏÏȼÓÒâÏò»¥³âËø£»
Ëæ×ÅÒâÏòËøµÄ¼ÓÈë£¬ËøÀàÐÍÖ®¼äµÄ¼æÈݾØÕóÒ²±äµÃÓú¼Ó¸´ÔÓ£º

ÒâÏòËøÆäʵ²»»á×èÈûÈ«±íɨÃèÖ®ÍâµÄÈκÎÇëÇó£¬ËüÃǵÄÖ÷ҪĿµÄÊÇΪÁ˱íʾÊÇ·ñÓÐÈËÇëÇóËø¶¨±íÖеÄijһÐÐÊý¾Ý¡£
ÓеÄÈË¿ÉÄÜ»á¶ÔÒâÏòËøµÄÄ¿µÄ²¢²»ÊÇÍêÈ«µÄÀí½â£¬ÎÒÃÇÔÚÕâÀï¿ÉÒÔ¾ÙÒ»¸öÀý×Ó£ºÈç¹ûûÓÐÒâÏòËø£¬µ±ÒѾÓÐÈËʹÓÃÐÐËø¶Ô±íÖеÄijһÐнøÐÐÐÞ¸Äʱ£¬Èç¹ûÁíÍâÒ»¸öÇëÇóÒª¶ÔÈ«±í½øÐÐÐ޸ģ¬ÄÇô¾ÍÐèÒª¶ÔËùÓеÄÐÐÊÇ·ñ±»Ëø¶¨½øÐÐɨÃ裬ÔÚÕâÖÖÇé¿öÏ£¬Ð§ÂÊÊǷdz£µÍµÄ£»²»¹ý£¬ÔÚÒýÈëÒâÏòËøÖ®ºó£¬µ±ÓÐÈËʹÓÃÐÐËø¶Ô±íÖеÄijһÐнøÐÐÐÞ¸Ä֮ǰ£¬»áÏÈΪ±íÌí¼ÓÒâÏò»¥³âËø£¨IX£©£¬ÔÙΪÐмǼÌí¼Ó»¥³âËø£¨X£©£¬ÔÚÕâʱÈç¹ûÓÐÈ˳¢ÊÔ¶ÔÈ«±í½øÐÐÐ޸ľͲ»ÐèÒªÅжϱíÖеÄÿһÐÐÊý¾ÝÊÇ·ñ±»¼ÓËøÁË£¬Ö»ÐèҪͨ¹ýµÈ´ýÒâÏò»¥³âËø±»ÊͷžͿÉÒÔÁË¡£
ËÀËøµÄ·¢Éú
¼ÈÈ» InnoDB ÖÐʵÏÖµÄËøÊDZ¯¹ÛµÄ£¬ÄÇô²»Í¬ÊÂÎñÖ®¼ä¾Í¿ÉÄܻụÏàµÈ´ý¶Ô·½ÊÍ·ÅËøÔì³ÉËÀËø£¬×îÖÕµ¼ÖÂÊÂÎñ·¢Éú´íÎó£»ÏëÒªÔÚ
MySQL ÖÐÖÆÔìËÀËøµÄÎÊÌâÆäʵ·Ç³£ÈÝÒ×£º

Á½¸ö»á»°¶¼³ÖÓÐÒ»¸öËø£¬²¢ÇÒ³¢ÊÔ»ñÈ¡¶Ô·½µÄËøÊ±¾Í»á·¢ÉúËÀËø£¬²»¹ý MySQL Ò²ÄÜÔÚ·¢ÉúËÀËøÊ±¼°Ê±·¢ÏÖÎÊÌ⣬²¢±£Ö¤ÆäÖеÄÒ»¸öÊÂÎñÄܹ»Õý³£¹¤×÷£¬Õâ¶ÔÎÒÃÇÀ´ËµÒ²ÊÇÒ»¸öºÃÏûÏ¢¡£
ÊÂÎñÓë¸ôÀë¼¶±ð
ÔÚ½éÉÜÁËËøÖ®ºó£¬ÎÒÃÇÔÙÀ´Ì¸Ì¸Êý¾Ý¿âÖÐÒ»¸ö·Ç³£ÖØÒªµÄ¸ÅÄî ¡ª¡ª ÊÂÎñ£»ÏàÐÅÖ»ÒªÊÇÒ»¸öºÏ¸ñµÄÈí¼þ¹¤³Ìʦ¾Í¶ÔÊÂÎñµÄÌØÐÔÓÐËùÁ˽⣬ÆäÖб»È˾³£ÌáÆðµÄ¾ÍÊÇÊÂÎñµÄÔ×ÓÐÔ£¬ÔÚÊý¾ÝÌá½»¹¤×÷ʱ£¬ÒªÃ´±£Ö¤ËùÓеÄÐ޸ͼÄܹ»Ìá½»£¬ÒªÃ´¾ÍËùÓеÄÐÞ¸ÄÈ«²¿»Ø¹ö¡£
µ«ÊÇÊÂÎñ»¹×ñѰüÀ¨Ô×ÓÐÔÔÚÄÚµÄ ACID ËÄ´óÌØÐÔ£ºÔ×ÓÐÔ£¨Atomicity£©¡¢Ò»ÖÂÐÔ£¨Consistency£©¡¢¸ôÀëÐÔ£¨Isolation£©ºÍ³Ö¾ÃÐÔ£¨Durability£©£»ÎÄÕ²»»á¶ÔÕâËÄ´óÌØÐÔÈ«²¿Õ¹¿ª½øÐнéÉÜ£¬ÏàÐÅÄãÄܹ»Í¨¹ý
Google ºÍÊý¾Ý¿âÏà¹ØµÄÊé¼®ÇáËÉ»ñµÃÓйØËüÃǵĸÅÄ±¾ÎÄ×îºóÒª½éÉܵľÍÊÇÊÂÎñµÄËÄÖÖ¸ôÀë¼¶±ð¡£
¼¸ÖÖ¸ôÀë¼¶±ð
ÊÂÎñµÄ¸ôÀëÐÔÊÇÊý¾Ý¿â´¦ÀíÊý¾ÝµÄ¼¸´ó»ù´¡Ö®Ò»£¬¶ø¸ôÀë¼¶±ðÆäʵ¾ÍÊÇÌṩ¸øÓû§ÓÃÓÚÔÚÐÔÄܺͿɿ¿ÐÔ×ö³öÑ¡ÔñºÍȨºâµÄÅäÖÃÏî¡£
ISO ºÍ ANIS SQL ±ê×¼ÖÆ¶¨ÁËËÄÖÖÊÂÎñ¸ôÀë¼¶±ð£¬¶ø InnoDB ×ñÑÁË SQL:1992
±ê×¼ÖеÄËÄÖÖ¸ôÀë¼¶±ð£º READ UNCOMMITED¡¢ READ COMMITED¡¢ REPEATABLE
READºÍ SERIALIZABLE£»Ã¿¸öÊÂÎñµÄ¸ôÀë¼¶±ðÆäʵ¶¼±ÈÉÏÒ»¼¶¶à½â¾öÁËÒ»¸öÎÊÌ⣺
RAED UNCOMMITED£ºÊ¹ÓòéѯÓï¾ä²»»á¼ÓËø£¬¿ÉÄÜ»á¶Áµ½Î´Ìá½»µÄÐУ¨Dirty Read£©£»
READ COMMITED£ºÖ»¶Ô¼Ç¼¼Ó¼ÇÂ¼Ëø£¬¶ø²»»áÔڼǼ֮¼ä¼Ó¼äÏ¶Ëø£¬ËùÒÔÔÊÐíеļǼ²åÈëµ½±»Ëø¶¨¼Ç¼µÄ¸½½ü£¬ËùÒÔÔÙ¶à´ÎʹÓòéѯÓï¾äʱ£¬¿ÉÄܵõ½²»Í¬µÄ½á¹û£¨Non-Repeatable
Read£©£»
REPEATABLE READ£º¶à´Î¶Áȡͬһ·¶Î§µÄÊý¾Ý»á·µ»ØµÚÒ»´Î²éѯµÄ¿ìÕÕ£¬²»»á·µ»Ø²»Í¬µÄÊý¾ÝÐУ¬µ«ÊÇ¿ÉÄÜ·¢Éú»Ã¶Á£¨Phantom
Read£©£»
SERIALIZABLE£ºInnoDB ÒþʽµØ½«È«²¿µÄ²éѯÓï¾ä¼ÓÉϹ²ÏíËø£¬½â¾öÁ˻öÁµÄÎÊÌ⣻
MySQL ÖÐĬÈϵÄÊÂÎñ¸ôÀë¼¶±ð¾ÍÊÇ REPEATABLE READ£¬µ«ÊÇËüͨ¹ý Next-Key
ËøÒ²Äܹ»ÔÚijÖ̶ֳÈÉϽâ¾ö»Ã¶ÁµÄÎÊÌâ¡£

Ôà¶Á
µ±ÊÂÎñµÄ¸ôÀë¼¶±ðΪ READ UNCOMMITEDʱ£¬ÎÒÃÇÔÚ SESSION2ÖвåÈëµÄδÌá½»Êý¾ÝÔÚ
SESSION1ÖÐÊÇ¿ÉÒÔ·ÃÎʵġ£

²»¿ÉÖØ¸´¶Á
µ±ÊÂÎñµÄ¸ôÀë¼¶±ðΪ READ COMMITEDʱ£¬ËäÈ»½â¾öÁËÔà¶ÁµÄÎÊÌ⣬µ«ÊÇÈç¹ûÔÚ SESSION1ÏȲéѯÁËÒ»¸ö·¶Î§µÄÊý¾Ý£¬ÔÚÕâÖ®ºó
SESSION2ÖвåÈëÒ»ÌõÊý¾Ý²¢ÇÒÌá½»ÁËÐ޸ģ¬ÔÚÕâʱ£¬Èç¹û SESSION1ÖÐÔÙ´ÎʹÓÃÏàͬµÄ²éѯÓï¾ä£¬¾Í»á·¢ÏÖÁ½´Î²éѯµÄ½á¹û²»Ò»Ñù¡£

»Ã¶Á
ÖØÐ¿ªÆôÁËÁ½¸ö»á»° SESSION1ºÍ SESSION2£¬ÔÚ SESSION1ÖÐÎÒÃDzéѯȫ±íµÄÐÅÏ¢£¬Ã»Óеõ½ÈκμǼ£»ÔÚ
SESSION2ÖÐÏò±íÖвåÈëÒ»ÌõÊý¾Ý²¢Ìá½»£»ÓÉÓÚ REPEATABLE READµÄÔÒò£¬Ôٴβéѯȫ±íµÄÊý¾Ýʱ£¬ÎÒÃÇ»ñµÃµ½µÄÈÔÈ»Êǿռ¯£¬µ«ÊÇÔÚÏò±íÖвåÈëͬÑùµÄÊý¾ÝÈ´³öÏÖÁË´íÎó¡£

ÕâÖÖÏÖÏóÔÚÊý¾Ý¿âÖоͱ»³Æ×÷»Ã¶Á£¬ËäÈ»ÎÒÃÇʹÓòéѯÓï¾äµÃµ½ÁËÒ»¸ö¿ÕµÄ¼¯ºÏ£¬µ«ÊDzåÈëÊý¾ÝʱȴµÃµ½ÁË´íÎ󣬺ÃÏñ֮ǰµÄ²éѯÊǻþõÒ»Ñù¡£
ÔÚ±ê×¼µÄÊÂÎñ¸ôÀë¼¶±ðÖУ¬»Ã¶ÁÊÇÓɸü¸ßµÄ¸ôÀë¼¶±ð SERIALIZABLE½â¾öµÄ£¬µ«ÊÇËüÒ²¿ÉÒÔͨ¹ý
MySQL ÌṩµÄ Next-Key Ëø½â¾ö£º

REPERATABLE READºÍ READ UNCOMMITEDÆäʵÊÇì¶ÜµÄ£¬Èç¹û±£Ö¤ÁËǰÕ߾Ϳ´²»µ½ÒѾÌá½»µÄÊÂÎñ£¬Èç¹û±£Ö¤Á˺óÕߣ¬¾Í»áµ¼ÖÂÁ½´Î²éѯµÄ½á¹û²»Í¬£¬MySQL
ΪÎÒÃÇÌṩÁËÒ»ÖÖÕÛÖеķ½Ê½£¬Äܹ»ÔÚ REPERATABLE READģʽϼÓËø·ÃÎÊÒѾÌá½»µÄÊý¾Ý£¬Æä±¾Éí²¢²»Äܽâ¾ö»Ã¶ÁµÄÎÊÌ⣬¶øÊÇͨ¹ýÎÄÕÂÇ°ÃæÌáµ½µÄ
Next-Key ËøÀ´½â¾ö¡£
|