(005)mysql常用存儲(chǔ)引擎

概述

mysql5.5之前默認(rèn)存儲(chǔ)引擎是MyISAM孝冒,5.5之后改為InnoDB。若要修改默認(rèn)引擎拟杉,可以修改配置文件中的default-storage-engine庄涡。可以通過(guò)show engines來(lái)查看當(dāng)前數(shù)據(jù)庫(kù)支持的引擎搬设。使用select engine from information_schema.engines where transactions = 'yes';來(lái)查看哪些引擎支持事務(wù)穴店。在創(chuàng)建表到時(shí)候通過(guò)engine=...或type=...來(lái)指定所要使用到引擎。

MyISAM

  1. 它不支持事務(wù)拿穴,也不支持外鍵泣洞,其優(yōu)勢(shì)是訪(fǎng)問(wèn)的速度快,對(duì)事務(wù)完整性沒(méi)有要求的或者以select/insert為主的應(yīng)用基本上可以使用這個(gè)引擎來(lái)創(chuàng)建表默色。

  2. 每個(gè)MyISAM在磁盤(pán)上都有3個(gè)文件球凰,其文件名都與表名相同,但擴(kuò)展名是:

    • .frm(表定義)
    • .MYD(MYDate:存儲(chǔ)數(shù)據(jù))
    • .MYI(MYIndex:存儲(chǔ)索引)
  3. .MYD文件和.MYI文件可以放置在不同的目錄中该窗,通過(guò) data directory 和index directory語(yǔ)句指定弟蚀。

  4. MyISAM類(lèi)型的表可能會(huì)損壞,可以使用CHECK TABLE語(yǔ)句來(lái)檢查MyISAM表的健康酗失,并用REPAIR TABLE語(yǔ)句修復(fù)一個(gè)損壞到MyISAM表义钉。

  5. MyISAM支持3種不同的存儲(chǔ)格式:

    • 靜態(tài)(固定長(zhǎng)度)表
    • 動(dòng)態(tài)表
    • 壓縮表

    在靜態(tài)表中,如果需要保存的內(nèi)容后面本來(lái)就帶有空格规肴,那么在返回結(jié)果的時(shí)候會(huì)去掉公共的捶闸。

    在動(dòng)態(tài)表中,記錄不固定拖刃,優(yōu)點(diǎn)是占用空間相對(duì)比較少删壮,缺點(diǎn)是頻繁的更新和刪除記錄會(huì)產(chǎn)生碎片,需要定期執(zhí)行optimize table 來(lái)改善性能兑牡。

    在壓縮表中央碟,由myisampack工具創(chuàng)建,占據(jù)非常小的磁盤(pán)空間均函。因?yàn)槊總€(gè)記錄都被單獨(dú)壓縮的亿虽。

InnoDB

  1. InnoDB支持事務(wù)安全,對(duì)比MyISAM引擎苞也,InnoDB寫(xiě)的效率差一些洛勉,并且會(huì)占據(jù)更多的磁盤(pán)空間。
  2. InnoDB自動(dòng)增長(zhǎng)列可以手工插入如迟,但是插入的值是空或者0收毫,則實(shí)際插入的將是自動(dòng)增長(zhǎng)后的值攻走。可以使用last_insert_id()查詢(xún)當(dāng)前線(xiàn)程最后插入記錄使用的值此再∥袈В可以通過(guò)alert table *** auto_increment=n;語(yǔ)句強(qiáng)制設(shè)置自動(dòng)增長(zhǎng)值。
  3. 對(duì)于InnoDB表引润,自動(dòng)增長(zhǎng)列必須是索引巩趁。如果是組合索引痒玩,也必須是組合索引的第一列淳附,但是對(duì)于MyISAM表,自動(dòng)增長(zhǎng)列可以是組合索引的其他列蠢古,這樣插入記錄后奴曙,自動(dòng)增長(zhǎng)列是按照組合索引到前面幾列排序后遞增的。
  4. MySQL支持外鍵的存儲(chǔ)引擎只有InnoDB草讶,在創(chuàng)建外鍵的時(shí)候洽糟,父表必須有對(duì)應(yīng)的索引,子表在創(chuàng)建外鍵的時(shí)候也會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的索引堕战。在創(chuàng)建索引的時(shí)候坤溃,可以指定在刪除、更新父表時(shí)嘱丢,對(duì)子表進(jìn)行的相應(yīng)操作薪介,包括restrict、cascade越驻、set null和no action汁政。其中restrict和no action相同,是指限制在子表有關(guān)聯(lián)的情況下缀旁,父表不能更新记劈;casecade表示父表在更新或刪除時(shí),更新或者刪除子表對(duì)應(yīng)的記錄并巍;set null 則表示父表在更新或者刪除的時(shí)候目木,子表對(duì)應(yīng)的字段被set null。當(dāng)某個(gè)表被其它表創(chuàng)建了外鍵參照懊渡,那么該表對(duì)應(yīng)的索引或主鍵被禁止刪除刽射。可以使用set foreign_key_checks=0;臨時(shí)關(guān)閉外鍵約束距贷,set foreign_key_checks=1;打開(kāi)約束柄冲。
  5. InnoDB存儲(chǔ)表和索引有如下兩種方式:
    • 使用共享表空間存儲(chǔ)。
    • 使用多表空間存儲(chǔ)忠蝗。

MEMORY

  1. memory使用存在內(nèi)存中的內(nèi)容來(lái)創(chuàng)建表现横。每個(gè)MEMORY表實(shí)際對(duì)應(yīng)一個(gè)磁盤(pán)文件,格式是.frm。MEMORY類(lèi)型的表訪(fǎng)問(wèn)非辰潇簦快骇两,因?yàn)樗綌?shù)據(jù)是放在內(nèi)存中的,并且默認(rèn)使用HASH索引姜盈,但是一旦服務(wù)器關(guān)閉低千,表中的數(shù)據(jù)就會(huì)丟失,但表還會(huì)繼續(xù)存在馏颂。
  2. 每個(gè)MEMORY表中放置到數(shù)據(jù)量的大小示血,受到max_heap_table_size系統(tǒng)變量的約束,這個(gè)系統(tǒng)變量的初始值是16M救拉,同時(shí)在創(chuàng)建MEMORY表時(shí)可以使用MAX_ROWS子句來(lái)指定表中的最大行數(shù)难审。
  3. memory主要用于那些內(nèi)容變化不頻繁的代碼表,或作為統(tǒng)計(jì)操作的中間結(jié)果表亿絮。

MERGE

  1. merge存儲(chǔ)引擎是一組MyISAM表的組合告喊,這些MyISAM表結(jié)構(gòu)必須完全相同,MERGE表中并沒(méi)有數(shù)據(jù)派昧,對(duì)MERGE類(lèi)型的表可以進(jìn)行查詢(xún)黔姜、更新、刪除的操作蒂萎,這些操作實(shí)際上是對(duì)內(nèi)部的MyISAM表進(jìn)行操作秆吵。
  2. 對(duì)于對(duì)MERGE表進(jìn)行的插入操作,是根據(jù)INSERT_METHOD子句定義的插入的表岖是,可以有3個(gè)不同的值帮毁,first和last值使得插入操作被相應(yīng)的作用在第一個(gè)或最后一個(gè)表上,不定義這個(gè)子句或者為NO豺撑,表示不能對(duì)這個(gè)MERGE表進(jìn)行插入操作烈疚。
  3. 可以對(duì)MERGE表進(jìn)行drop操作,這個(gè)操作只是刪除MERGE表的定義聪轿,對(duì)內(nèi)部的表沒(méi)有任何影響爷肝。
  4. MERGE在磁盤(pán)上保留2個(gè)以MERGE表名開(kāi)頭文件:.frm文件存儲(chǔ)表的定義;.MRG文件包含組合表的信息陆错,包括MERGE表由哪些表組成灯抛,插入數(shù)據(jù)時(shí)的依據(jù)∫舸桑可以通過(guò)修改.MRG文件來(lái)修改MERGE表对嚼,但是修改后要通過(guò)flush table刷新。
  5. merge表與分區(qū)表的區(qū)別是:merge表不會(huì)智能的將記錄寫(xiě)到對(duì)應(yīng)的表中绳慎,而分區(qū)表可以的纵竖。

總結(jié)

仍一張表作為總結(jié):


mysql常用存儲(chǔ)引擎
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漠烧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子靡砌,更是在濱河造成了極大的恐慌已脓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件通殃,死亡現(xiàn)場(chǎng)離奇詭異度液,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)画舌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)堕担,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人骗炉,你說(shuō)我怎么就攤上這事照宝。” “怎么了句葵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)兢仰。 經(jīng)常有香客問(wèn)我乍丈,道長(zhǎng),這世上最難降的妖魔是什么把将? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任轻专,我火速辦了婚禮,結(jié)果婚禮上察蹲,老公的妹妹穿的比我還像新娘请垛。我一直安慰自己,他們只是感情好洽议,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布宗收。 她就那樣靜靜地躺著,像睡著了一般亚兄。 火紅的嫁衣襯著肌膚如雪混稽。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天审胚,我揣著相機(jī)與錄音匈勋,去河邊找鬼。 笑死膳叨,一個(gè)胖子當(dāng)著我的面吹牛洽洁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播菲嘴,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼饿自,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碎浇!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起璃俗,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奴璃,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后城豁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體苟穆,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年唱星,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雳旅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡间聊,死狀恐怖攒盈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哎榴,我是刑警寧澤型豁,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站尚蝌,受9級(jí)特大地震影響迎变,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜飘言,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一衣形、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姿鸿,春花似錦谆吴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至碟渺,卻和暖如春鲜锚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苫拍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工芜繁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绒极。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓骏令,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親垄提。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榔袋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容