Mysql基礎(chǔ)-存儲引擎詳述

前文索引:Mysql基礎(chǔ)-存儲引擎簡述

說明:本節(jié)將詳細介紹一下常用的Mysql存儲引擎特性

MySQL數(shù)據(jù)存儲

MyISAM

  它不支持事務(wù)盆色,也不支持外鍵工育,但是訪問速度快腹缩,對事務(wù)完整性沒有要求或者以SELECT旨剥、INSERT為主的應(yīng)用基本都可以使用這個引擎來創(chuàng)建表。

? ??????每個MyISAM在磁盤上存儲成3個文件凡泣,其中文件名和表名都相同枉疼,但是擴展名分別為:

? ? ????????1.?.frm(存儲表定義)

? ????????? 2. .MYD(MYData,存儲數(shù)據(jù))

? ? ????????3. .MYI(MYIndex鞋拟,存儲索引)

? ??????數(shù)據(jù)文件和索引文件可以放置在不同的目錄骂维,平均分配IO,獲取更快的速度贺纲。要指定數(shù)據(jù)文件和索引文件的路徑航闺,需要在創(chuàng)建表的時候通過DATA DIRECTORY和INDEX DIRECTORY語句指定,文件路徑需要使用絕對路徑猴誊。

? ??????每個MyISAM表都有一個標(biāo)志潦刃,服務(wù)器或myisamchk程序在檢查MyISAM數(shù)據(jù)表時會對這個標(biāo)志進行設(shè)置。MyISAM表還有一個標(biāo)志用來表明該數(shù)據(jù)表在上次使用后是不是被正常的關(guān)閉了懈叹。如果服務(wù)器以為當(dāng)機或崩潰乖杠,這個標(biāo)志可以用來判斷數(shù)據(jù)表是否需要檢查和修復(fù)。如果想讓這種檢查自動進行项阴,可以在啟動服務(wù)器時使用--myisam-recover現(xiàn)象滑黔。這會讓服務(wù)器在每次打開一個MyISAM數(shù)據(jù)表是自動檢查數(shù)據(jù)表的標(biāo)志并進行必要的修復(fù)處理。MyISAM類型的表可能會損壞环揽,可以使用CHECK TABLE語句來檢查MyISAM表的健康,并用REPAIR TABLE語句修復(fù)一個損壞到MyISAM表庵佣。

? ??????MyISAM的表還支持3種不同的存儲格式:

? ??????靜態(tài)(固定長度)表:其中靜態(tài)表是默認的存儲格式歉胶。靜態(tài)表中的字段都是非變長字段,這樣每個記錄都是固定長度的巴粪,這種存儲方式的優(yōu)點是存儲非常迅速通今,容易緩存粥谬,出現(xiàn)故障容易恢復(fù);缺點是占用的空間通常比動態(tài)表多辫塌。靜態(tài)表在數(shù)據(jù)存儲時會根據(jù)列定義的寬度定義補足空格漏策,但是在訪問的時候并不會得到這些空格,這些空格在返回給應(yīng)用之前已經(jīng)去掉臼氨。同時需要注意:在某些情況下可能需要返回字段后的空格掺喻,而使用這種格式時后面到空格會被自動處理掉。

? ??????動態(tài)表:動態(tài)表包含變長字段储矩,記錄不是固定長度的感耙,這樣存儲的優(yōu)點是占用空間較少,但是頻繁到更新刪除記錄會產(chǎn)生碎片持隧,需要定期執(zhí)行OPTIMIZE TABLE語句或myisamchk -r命令來改善性能即硼,并且出現(xiàn)故障的時候恢復(fù)相對比較困難。

? ??????壓縮表:壓縮表由myisamchk工具創(chuàng)建屡拨,占據(jù)非常小的空間只酥,因為每條記錄都是被單獨壓縮的,所以只有非常小的訪問開支呀狼。

InnoDB

????????InnoDB是一個健壯的事務(wù)型存儲引擎层皱,這種存儲引擎已經(jīng)被很多互聯(lián)網(wǎng)公司使用,為用戶操作非常大的數(shù)據(jù)存儲提供了一個強大的解決方案赠潦。在以下場合下叫胖,使用InnoDB是最理想的選擇:

????1.更新密集的表。InnoDB存儲引擎特別適合處理多重并發(fā)的更新請求她奥。

????2.事務(wù)瓮增。InnoDB存儲引擎是支持事務(wù)的標(biāo)準(zhǔn)MySQL存儲引擎。

????3.自動災(zāi)難恢復(fù)哩俭。與其它存儲引擎不同绷跑,InnoDB表能夠自動從災(zāi)難中恢復(fù)。

????4.外鍵約束凡资。MySQL支持外鍵的存儲引擎只有InnoDB砸捏。

????5.支持自動增加列AUTO_INCREMENT屬性。

? ? 6.基于行級別的鎖定和多版本化隙赁,使得在執(zhí)行同時包含有檢索的組合條件查詢時垦藏,可以表現(xiàn)很好的并發(fā)性能

? ? 7.從MySQL5.6開始,InnoDB支持全文檢索和FULLTEXT索引

一般來說伞访,如果需要事務(wù)支持掂骏,并且有較高的并發(fā)讀取頻率,InnoDB是不錯的選擇厚掷。

? ??? ??注意:

? ? ? ? ? ? 1弟灼、在MySQL5.6.6之前版本级解,InnoDB存儲引擎會把表(數(shù)據(jù)、索引)集中存儲在一個共享表空間中田绑,而不是像大多數(shù)其他存儲引擎那樣為不同的表創(chuàng)建不同的文件

? ? ? ? ? ? 2勤哗、InnoDB存儲引擎會把表空間當(dāng)作一個虛擬文件系統(tǒng),他會在其中存儲和管理所有InnoDB表內(nèi)容

? ? ? ? ? ? 3掩驱、在InnoDB引擎下芒划,可以通過啟用?innodb_file_per_table系統(tǒng)變量,使用獨立表空間

MEMORY

????????使用MySQL Memory存儲引擎的出發(fā)點是速度昙篙。為得到最快的響應(yīng)時間腊状,采用的邏輯存儲介質(zhì)是系統(tǒng)內(nèi)存。雖然在內(nèi)存中存儲表數(shù)據(jù)確實會提供很高的性能苔可,但當(dāng)mysqld守護進程崩潰時缴挖,所有的Memory數(shù)據(jù)都會丟失。獲得速度的同時也帶來了一些缺陷焚辅。它要求存儲在Memory數(shù)據(jù)表里的數(shù)據(jù)使用的是長度不變的格式映屋,這意味著不能使用BLOB和TEXT這樣的長度可變的數(shù)據(jù)類型,VARCHAR是一種長度可變的類型同蜻,但因為它在MySQL內(nèi)部當(dāng)做長度固定不變的CHAR類型棚点,所以可以使用。

一般在以下幾種情況下使用Memory存儲引擎:

????????1.目標(biāo)數(shù)據(jù)較小湾蔓,而且被非常頻繁地訪問瘫析。在內(nèi)存中存放數(shù)據(jù),所以會造成內(nèi)存的使用默责,可以通過參數(shù)max_heap_table_size控制Memory表的大小贬循,設(shè)置此參數(shù),就可以限制Memory表的最大大小桃序。

????????2.如果數(shù)據(jù)是臨時的杖虾,而且要求必須立即可用,那么就可以存放在內(nèi)存表中媒熊。

????????3.存儲在Memory表中的數(shù)據(jù)如果突然丟失奇适,不會對應(yīng)用服務(wù)產(chǎn)生實質(zhì)的負面影響。

????????Memory同時支持散列索引和B樹索引芦鳍。B樹索引的優(yōu)于散列索引的是嚷往,可以使用部分查詢和通配查詢,也可以使用<怜校、>和>=等操作符方便數(shù)據(jù)挖掘间影。散列索引進行“相等比較”非常快茄茁,但是對“范圍比較”的速度就慢多了魂贬,因此散列索引值適合使用在=和<>的操作符中,不適合在<或>操作符中裙顽,也同樣不適合用在order by子句中付燥。

其他存儲引擎

? ? ? ? 1、NDB存儲引擎:是MySQL集群存儲引擎愈犹,在這個存儲引擎下键科,MySQL服務(wù)器實際上變成了一個其他進程(他們提供了對NDB表的訪問)的集群客戶端。集群節(jié)點會處理彼此間的通信漩怎,從而在內(nèi)存中實現(xiàn)對表的管理勋颖。為了實現(xiàn)數(shù)據(jù)冗余,這些表會在集群進程中復(fù)制勋锤。

? ? ? ? 2饭玲、CSV存儲引擎:在CSV存儲引擎下,存儲數(shù)據(jù)時叁执,會用逗號分隔值茄厘。對于每個表,他會在數(shù)據(jù)庫目錄里創(chuàng)建一個.csv文件谈宛,這時一種普通文本文件次哈,其中每個表占用一行。CSV存儲引擎不支持索引

? ? ? ? 3吆录、MERG存儲引擎:此存儲引擎窑滞,提供一種把多個MyISAM表合并為一個邏輯單元的手段。查詢一個megrge表時恢筝,相當(dāng)于查詢其所有的成員表哀卫。此做法的好處之一是,可以突破文件系統(tǒng)對單個MyISAM表的最大尺寸所設(shè)定的限制等

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滋恬,一起剝皮案震驚了整個濱河市聊训,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恢氯,老刑警劉巖带斑,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異勋拟,居然都是意外死亡勋磕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門敢靡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挂滓,“玉大人,你說我怎么就攤上這事啸胧「险荆” “怎么了幔虏?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贝椿。 經(jīng)常有香客問我想括,道長,這世上最難降的妖魔是什么烙博? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任瑟蜈,我火速辦了婚禮,結(jié)果婚禮上渣窜,老公的妹妹穿的比我還像新娘铺根。我一直安慰自己,他們只是感情好乔宿,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布位迂。 她就那樣靜靜地躺著,像睡著了一般予颤。 火紅的嫁衣襯著肌膚如雪囤官。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天蛤虐,我揣著相機與錄音党饮,去河邊找鬼。 笑死驳庭,一個胖子當(dāng)著我的面吹牛刑顺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饲常,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蹲堂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贝淤?” 一聲冷哼從身側(cè)響起柒竞,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎播聪,沒想到半個月后朽基,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡离陶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年稼虎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片招刨。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡霎俩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情打却,我是刑警寧澤杉适,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站学密,受9級特大地震影響淘衙,放射性物質(zhì)發(fā)生泄漏传藏。R本人自食惡果不足惜腻暮,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毯侦。 院中可真熱鬧哭靖,春花似錦、人聲如沸侈离。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卦碾。三九已至铺坞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洲胖,已是汗流浹背济榨。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绿映,地道東北人擒滑。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像叉弦,于是被迫代替她去往敵國和親丐一。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

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