IT系統(tǒng)數(shù)據(jù)庫(kù)運(yùn)維:MyISAM與InnoDB 的區(qū)別
2020-03-31 17:28 作者:艾銻無(wú)限 瀏覽量:
精“服務(wù)”之道,通“技術(shù)”之理

小的時(shí)候我總在想一件事,一些體育比賽為什么沒(méi)有辦法超越前面的人,為什么大家還要學(xué)習(xí),還要不停的舉辦比賽,一個(gè)小孩子怎么學(xué)習(xí)也沒(méi)有大人跑的快,跳的高,投的遠(yuǎn),為什么他們還是不停的練習(xí),后來(lái)我發(fā)現(xiàn),我們學(xué)習(xí)的目的不是為了超越他人,而是為了戰(zhàn)勝自己,超越自己,讓自己的潛能達(dá)到最大限度的發(fā)揮,讓自己體驗(yàn)一把全力以赴的人生。
這個(gè)問(wèn)題源自我們的企業(yè),艾銻無(wú)限,做了十多年的企業(yè),忽然發(fā)現(xiàn)超越自己的企業(yè)有無(wú)數(shù)家,那我怎么做都難以做到這個(gè)世界的第一名,這樣思考下去越做越有壓力,越做越覺(jué)得沒(méi)有什么意思,因?yàn)橐磺卸紩?huì)過(guò)去,即使?fàn)幍玫谝挥帜茉鯓幽兀?br />
不過(guò)當(dāng)領(lǐng)悟到人生活著的真諦時(shí),我發(fā)現(xiàn)企業(yè)存在的價(jià)值與人生完全一樣,這個(gè)世界需要不同的人種,不同的語(yǔ)言,不同的性格,不同的思想,我們才會(huì)覺(jué)得有意義,我們才會(huì)覺(jué)得有無(wú)限探索的機(jī)會(huì),如果全都一樣,可能沒(méi)有一個(gè)人愿意活好幾十年。在電影《后五百年中》那些透過(guò)DNA的克隆人,每一個(gè)人都一樣,活著唯一的意義就是忙著死去。這樣的人生又有誰(shuí)想要過(guò)呢.
其實(shí)企業(yè)也一樣,這個(gè)世界需要有不同的企業(yè),需要有個(gè)性的企業(yè),需要有獨(dú)特領(lǐng)悟的企業(yè),只有這樣才能讓每一個(gè)不同的人去選擇的時(shí)候有更多的空間和機(jī)會(huì)。才能讓這個(gè)世界五彩繽紛,才能讓所有人活得多姿多彩,才能讓大家覺(jué)得這是一個(gè)無(wú)限可能性的世界。
從我們開(kāi)始經(jīng)營(yíng)艾銻無(wú)限的時(shí)候,就發(fā)現(xiàn)原來(lái)服務(wù)他人是件很幸福的事,特別當(dāng)我們?yōu)閯e人解決了他們很久困擾的問(wèn)題,當(dāng)他們看到問(wèn)題已被解決,臉上露出了久違的笑容的時(shí)候,我們心里滿滿的,那是一種無(wú)法用語(yǔ)言表達(dá)的幸福。經(jīng)過(guò)十幾年錘煉,我們?cè)?jīng)在服務(wù)過(guò)程中有過(guò)被誤會(huì),有過(guò)被不理解,有過(guò)被不認(rèn)同,但每當(dāng)想起那一張張笑臉,我們又重新鼓起勇氣,重拾信心,繼續(xù)前行,因?yàn)槲覀兩钪昴ヒ粍Γ坊ㄏ阕钥嗪畞?lái)的道理.

今天每一位艾銻人都知道誠(chéng)心、細(xì)心、貼心三心服務(wù)是艾銻無(wú)限的服務(wù)之道,是經(jīng)的起檢驗(yàn)的服務(wù)標(biāo)準(zhǔn),是5000多家客戶體驗(yàn)后并極其認(rèn)可的服務(wù)系統(tǒng),我們認(rèn)為服務(wù)不僅僅是解決客戶遇到的問(wèn)題,更需要解決客戶遇到問(wèn)題后著急的心,只要心處理好了,問(wèn)題自然而然也就沒(méi)有了。
技術(shù)是門(mén)學(xué)問(wèn),但好技術(shù)更是門(mén)藝術(shù),真正的技術(shù)不僅僅是企業(yè)帶來(lái)更高的效率,創(chuàng)造更大的價(jià)值,還能為整個(gè)社會(huì)創(chuàng)造一種全新的生產(chǎn)方式,蒸汽機(jī)取代了農(nóng)耕時(shí)代,讓我們有了工廠和比馬跑的更快拖的更多貨的車(chē),我們稱(chēng)這次變革為“第一次工業(yè)革命”,100多年后人類(lèi)社會(huì)生產(chǎn)力發(fā)展又一次重大飛躍,人們把這次變革叫做“第二次工業(yè)革命”,人類(lèi)由此進(jìn)入“電氣時(shí)代”。這個(gè)時(shí)代產(chǎn)生了汽車(chē)和飛機(jī),讓我們的速度和效率發(fā)生了天翻地覆的變化.而第三次是科技的革命,并且一直延續(xù)到新千年,讓整個(gè)人類(lèi)進(jìn)入信息時(shí)代。接下來(lái)我們很快就會(huì)發(fā)生“第四次科技革命” ,這次將以技術(shù)和數(shù)據(jù)驅(qū)動(dòng)整個(gè)世界,而人將在這次革命中并非是主角,當(dāng)“阿法狗”打敗世界圍棋冠軍的時(shí)候,我們可能已經(jīng)意識(shí)到這個(gè)時(shí)代的來(lái)臨,技術(shù)將不僅僅是技術(shù),技術(shù)將會(huì)引領(lǐng)人類(lèi)的發(fā)展和變革,用好了就是藝術(shù),用不好有可能就是一場(chǎng)災(zāi)難.
所以我們期望透過(guò)技術(shù)服務(wù),找到服務(wù)人類(lèi)的規(guī)律,而不是取代人類(lèi),讓更多人失業(yè),而是讓人類(lèi)因技術(shù)變得更強(qiáng)大.
IT系統(tǒng)數(shù)據(jù)庫(kù)運(yùn)維:MyISAM與InnoDB 的區(qū)別
區(qū)別:
1. InnoDB支持事務(wù),MyISAM不支持,對(duì)于InnoDB每一條SQL語(yǔ)言都默認(rèn)封裝成事務(wù),自動(dòng)提交,這樣會(huì)影響速度,所以最好把多條SQL語(yǔ)言放在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)),必須要有主鍵,通過(guò)主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過(guò)主鍵查詢到數(shù)據(jù)。因此,主鍵不應(yīng)該過(guò)大,因?yàn)橹麈I太大,其他索引也都會(huì)很大。MyISAM是非聚集索引,也是使用B+Tree作為索引結(jié)構(gòu),索引和數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨(dú)立的。也就是說(shuō):InnoDB的B+樹(shù)主鍵索引的葉子節(jié)點(diǎn)就是數(shù)據(jù)文件,輔助索引的葉子節(jié)點(diǎn)是主鍵的值;而MyISAM的B+樹(shù)主鍵索引和輔助索引的葉子節(jié)點(diǎn)都是數(shù)據(jù)文件的地址指針。


4. InnoDB不保存表的具體行數(shù),執(zhí)行select count(*) from table時(shí)需要全表掃描。而MyISAM用一個(gè)變量保存了整個(gè)表的行數(shù),執(zhí)行上述語(yǔ)句時(shí)只需要讀出該變量即可,速度很快(注意不能加有任何WHERE條件);
那么為什么InnoDB沒(méi)有了這個(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ǔ)存起來(lái)方便快速查詢。InnoDB會(huì)嘗試遍歷一個(gè)盡可能小的索引除非優(yōu)化器提示使用別的索引。如果二級(jí)索引不存在,InnoDB還會(huì)嘗試去遍歷其他聚簇索引。
如果索引并沒(méi)有完全處于InnoDB維護(hù)的緩沖區(qū)(Buffer Pool)中,count操作會(huì)比較費(fèi)時(shí)。可以建立一個(gè)記錄總行數(shù)的表并讓你的程序在INSERT/DELETE時(shí)更新對(duì)應(yīng)的數(shù)據(jù)。和上面提到的問(wèn)題一樣,如果此時(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)詞是,如果訪問(wèn)沒(méi)有命中索引,也無(wú)法使用行鎖,將要退化為表鎖。
例如:
t_user(uid, uname, age, sex) innodb; uid PK 無(wú)其他索引
update t_user set age=10 where uid=1; 命中索引,行鎖。
update t_user set age=10 where uid != 1; 未命中索引,表鎖。
update t_user set age=10 where name='chackca'; 無(wú)索引,表鎖。
8、InnoDB表必須有主鍵(用戶沒(méi)有指定的話會(huì)自己找或生產(chǎn)一個(gè)主鍵),而Myisam可以沒(méi)有
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,如果既有讀也有寫(xiě),請(qǐng)使用InnoDB。
3. 系統(tǒng)奔潰后,MyISAM恢復(fù)起來(lái)更困難,能否接受;
4. MySQL5.5版本開(kāi)始Innodb已經(jīng)成為Mysql的默認(rèn)引擎(之前是MyISAM),說(shuō)明其優(yōu)勢(shì)是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不會(huì)差。
InnoDB為什么推薦使用自增ID作為主鍵?
答:自增ID可以保證每次插入時(shí)B+索引是從右邊擴(kuò)展的,可以避免B+樹(shù)和頻繁合并和分裂(對(duì)比使用UUID)。如果使用字符串主鍵和隨機(jī)主鍵,會(huì)使得數(shù)據(jù)隨機(jī)插入,效率比較差。
innodb引擎的4大特性
插入緩沖(insert buffer),二次寫(xiě)(double write),自適應(yīng)哈希索引(ahi),預(yù)讀(read ahead)