国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL MyISAM 與InnoDB 的區(qū)別

瀏覽:4日期:2023-10-11 08:37:46

區(qū)別:

1. InnoDB支持事務(wù),MyISAM不支持,對(duì)于InnoDB每一條SQL語言都默認(rèn)封裝成事務(wù),自動(dòng)提交,這樣會(huì)影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個(gè)事務(wù);

2. InnoDB支持外鍵,而MyISAM不支持。對(duì)一個(gè)包含外鍵的InnoDB表轉(zhuǎn)為MYISAM會(huì)失敗;

3. InnoDB是聚集索引,使用B+Tree作為索引結(jié)構(gòu),數(shù)據(jù)文件是和(主鍵)索引綁在一起的(表數(shù)據(jù)文件本身就是按B+Tree組織的一個(gè)索引結(jié)構(gòu)),必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到數(shù)據(jù)。因此,主鍵不應(yīng)該過大,因?yàn)橹麈I太大,其他索引也都會(huì)很大。

MyISAM是非聚集索引,也是使用B+Tree作為索引結(jié)構(gòu),索引和數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨(dú)立的。

也就是說:InnoDB的B+樹主鍵索引的葉子節(jié)點(diǎn)就是數(shù)據(jù)文件,輔助索引的葉子節(jié)點(diǎn)是主鍵的值;而MyISAM的B+樹主鍵索引和輔助索引的葉子節(jié)點(diǎn)都是數(shù)據(jù)文件的地址指針。

4. InnoDB不保存表的具體行數(shù),執(zhí)行select count(*) from table時(shí)需要全表掃描。而MyISAM用一個(gè)變量保存了整個(gè)表的行數(shù),執(zhí)行上述語句時(shí)只需要讀出該變量即可,速度很快(注意不能加有任何WHERE條件);

那么為什么InnoDB沒有了這個(gè)變量呢?

因?yàn)镮nnoDB的事務(wù)特性,在同一時(shí)刻表中的行數(shù)對(duì)于不同的事務(wù)而言是不一樣的,因此count統(tǒng)計(jì)會(huì)計(jì)算對(duì)于當(dāng)前事務(wù)而言可以統(tǒng)計(jì)到的行數(shù),而不是將總行數(shù)儲(chǔ)存起來方便快速查詢。InnoDB會(huì)嘗試遍歷一個(gè)盡可能小的索引除非優(yōu)化器提示使用別的索引。如果二級(jí)索引不存在,InnoDB還會(huì)嘗試去遍歷其他聚簇索引。如果索引并沒有完全處于InnoDB維護(hù)的緩沖區(qū)(Buffer Pool)中,count操作會(huì)比較費(fèi)時(shí)。可以建立一個(gè)記錄總行數(shù)的表并讓你的程序在INSERT/DELETE時(shí)更新對(duì)應(yīng)的數(shù)據(jù)。和上面提到的問題一樣,如果此時(shí)存在多個(gè)事務(wù)的話這種方案也不太好用。如果得到大致的行數(shù)值已經(jīng)足夠滿足需求可以嘗試SHOW TABLE STATUS

5. Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引領(lǐng)域的查詢效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了

6. MyISAM表格可以被壓縮后進(jìn)行查詢操作

7. InnoDB支持表、行(默認(rèn))級(jí)鎖,而MyISAM支持表級(jí)鎖

InnoDB的行鎖是實(shí)現(xiàn)在索引上的,而不是鎖在物理行記錄上。潛臺(tái)詞是,如果訪問沒有命中索引,也無法使用行鎖,將要退化為表鎖。

8、InnoDB表必須有主鍵(用戶沒有指定的話會(huì)自己找或生產(chǎn)一個(gè)主鍵),而Myisam可以沒有

9、Innodb存儲(chǔ)文件有frm、ibd,而Myisam是frm、MYD、MYI

Innodb:frm是表定義文件,ibd是數(shù)據(jù)文件

Myisam:frm是表定義文件,myd是數(shù)據(jù)文件,myi是索引文件

如何選擇:

1. 是否要支持事務(wù),如果要請(qǐng)選擇innodb,如果不需要可以考慮MyISAM;

2. 如果表中絕大多數(shù)都只是讀查詢,可以考慮MyISAM,如果既有讀也有寫,請(qǐng)使用InnoDB。

3. 系統(tǒng)奔潰后,MyISAM恢復(fù)起來更困難,能否接受;

4. MySQL5.5版本開始Innodb已經(jīng)成為Mysql的默認(rèn)引擎(之前是MyISAM),說明其優(yōu)勢(shì)是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不會(huì)差。

InnoDB為什么推薦使用自增ID作為主鍵?

答:自增ID可以保證每次插入時(shí)B+索引是從右邊擴(kuò)展的,可以避免B+樹和頻繁合并和分裂(對(duì)比使用UUID)。如果使用字符串主鍵和隨機(jī)主鍵,會(huì)使得數(shù)據(jù)隨機(jī)插入,效率比較差。

innodb引擎的4大特性

插入緩沖(insert buffer),二次寫(double write),自適應(yīng)哈希索引(ahi),預(yù)讀(read ahead)

以上就是MySQL MyISAM與InnoDB 的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于MySQL MyISAM與InnoDB 的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 精品欧美一区二区三区四区 | 一级欧美激情毛片 | 国产日韩欧美精品一区 | 美女精品永久福利在线 | 91精品国产高清久久久久久io | 在线观看免费视频国产 | 免费看成人毛片日本久久 | 欧美一级人与动毛片免费播放 | 日本成人免费在线视频 | 久久97视频 | 看一级特黄a大片日本片 | 亚洲大片 | 国内自拍小视频 | 亚洲精品精品一区 | 波多野结衣一区二区 | 美女网站色免费 | 92精品国产自产在线观看 | 亚洲欧美18v中文字幕高清 | 国产成人精品免费视频网页大全 | 精品欧美一区二区三区免费观看 | 日韩在线观看一区二区三区 | 全部免费的毛片在线看美国 | 亚洲一级毛片在线播放 | 五月色婷婷综合开心网4438 | 久久精品国产精品亚洲综合 | 黄色三级视频在线播放 | 999成人网| 日韩一页| 国产激情一区二区三区四区 | 亚洲一区二区三区久久久久 | 黄色美女网站免费 | 丝袜足液精子免费视频 | 久草看片 | 欧美性猛交xxxxxxxx软件 | 免费三级网站 | 成人男女18免费o | 看免费人成va视频全 | 国产成人免费视频精品一区二区 | 日本高清福利视频在线观看 | 色色视频免费网 | 国产美女视频黄a视频全免费网站 |