在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣選擇存儲(chǔ)引擎?MySQL存儲(chǔ)引擎怎么樣?

存儲(chǔ)界 ? 作者:工程師飛燕 ? 2018-09-02 10:15 ? 次閱讀

MySQL是我們經(jīng)常使用的數(shù)據(jù)庫(kù)處理系統(tǒng)(DBMS),不知小伙伴們有沒(méi)有注意過(guò)其中的“存儲(chǔ)引擎”(storage_engine)呢?有時(shí)候面試題中也會(huì)問(wèn)道MySQL幾種常用的存儲(chǔ)引擎的區(qū)別。這次就簡(jiǎn)短侃一下存儲(chǔ)引擎那些事兒。

先去查一下“引擎”概念。

引擎(Engine)是電子平臺(tái)上開(kāi)發(fā)程序或系統(tǒng)的核心組件。利用引擎,開(kāi)發(fā)者可迅速建立、鋪設(shè)程序所需的功能,或利用其輔助程序的運(yùn)轉(zhuǎn)。一般而言,引擎是一個(gè)程序或一套系統(tǒng)的支持部分。常見(jiàn)的程序引擎有游戲引擎,搜索引擎,殺毒引擎等。

Ok,我們知道了,引擎就是一個(gè)程序的核心組件。

簡(jiǎn)單來(lái)說(shuō),存儲(chǔ)引擎就是指表的類型以及表在計(jì)算機(jī)上的存儲(chǔ)方式。

存儲(chǔ)引擎的概念是MySQL的特點(diǎn),Oracle中沒(méi)有專門(mén)的存儲(chǔ)引擎的概念,Oracle有OLTP和OLAP模式的區(qū)分。不同的存儲(chǔ)引擎決定了MySQL數(shù)據(jù)庫(kù)中的表可以用不同的方式來(lái)存儲(chǔ)。我們可以根據(jù)數(shù)據(jù)的特點(diǎn)來(lái)選擇不同的存儲(chǔ)引擎。

在MySQL中的存儲(chǔ)引擎有很多種,可以通過(guò)“SHOW ENGINES”語(yǔ)句來(lái)查看。下面重點(diǎn)關(guān)注InnoDB、MyISAM、MEMORY這三種。

一、InnoDB存儲(chǔ)引擎

InnoDB給MySQL的表提供了事務(wù)處理、回滾、崩潰修復(fù)能力和多版本并發(fā)控制的事務(wù)安全。在MySQL從3.23.34a開(kāi)始包含InnnoDB。它是MySQL上第一個(gè)提供外鍵約束的表引擎。而且InnoDB對(duì)事務(wù)處理的能力,也是其他存儲(chǔ)引擎不能比擬的。靠后版本的MySQL的默認(rèn)存儲(chǔ)引擎就是InnoDB。

InnoDB存儲(chǔ)引擎總支持AUTO_INCREMENT。自動(dòng)增長(zhǎng)列的值不能為空,并且值必須唯一。MySQL中規(guī)定自增列必須為主鍵。在插入值的時(shí)候,如果自動(dòng)增長(zhǎng)列不輸入值,則插入的值為自動(dòng)增長(zhǎng)后的值;如果輸入的值為0或空(NULL),則插入的值也是自動(dòng)增長(zhǎng)后的值;如果插入某個(gè)確定的值,且該值在前面沒(méi)有出現(xiàn)過(guò),就可以直接插入。

InnoDB還支持外鍵(FOREIGN KEY)。外鍵所在的表叫做子表,外鍵所依賴(REFERENCES)的表叫做父表。父表中被字表外鍵關(guān)聯(lián)的字段必須為主鍵。當(dāng)刪除、更新父表中的某條信息時(shí),子表也必須有相應(yīng)的改變,這是數(shù)據(jù)庫(kù)的參照完整性規(guī)則。

InnoDB中,創(chuàng)建的表的表結(jié)構(gòu)存儲(chǔ)在.frm文件中(我覺(jué)得是frame的縮寫(xiě)吧)。數(shù)據(jù)和索引存儲(chǔ)在innodb_data_home_dir和innodb_data_file_path定義的表空間中。

InnoDB的優(yōu)勢(shì)在于提供了良好的事務(wù)處理、崩潰修復(fù)能力和并發(fā)控制。缺點(diǎn)是讀寫(xiě)效率較差,占用的數(shù)據(jù)空間相對(duì)較大。

二、MyISAM存儲(chǔ)引擎

MyISAM是MySQL中常見(jiàn)的存儲(chǔ)引擎,曾經(jīng)是MySQL的默認(rèn)存儲(chǔ)引擎。MyISAM是基于ISAM引擎發(fā)展起來(lái)的,增加了許多有用的擴(kuò)展。

MyISAM的表存儲(chǔ)成3個(gè)文件。文件的名字與表名相同。拓展名為frm、MYD、MYI。其實(shí),frm文件存儲(chǔ)表的結(jié)構(gòu);MYD文件存儲(chǔ)數(shù)據(jù),是MYData的縮寫(xiě);MYI文件存儲(chǔ)索引,是MYIndex的縮寫(xiě)。

基于MyISAM存儲(chǔ)引擎的表支持3種不同的存儲(chǔ)格式。包括靜態(tài)型、動(dòng)態(tài)型和壓縮型。其中,靜態(tài)型是MyISAM的默認(rèn)存儲(chǔ)格式,它的字段是固定長(zhǎng)度的;動(dòng)態(tài)型包含變長(zhǎng)字段,記錄的長(zhǎng)度不是固定的;壓縮型需要用到myisampack工具,占用的磁盤(pán)空間較小。

MyISAM的優(yōu)勢(shì)在于占用空間小,處理速度快。缺點(diǎn)是不支持事務(wù)的完整性和并發(fā)性。

三、MEMORY存儲(chǔ)引擎

MEMORY是MySQL中一類特殊的存儲(chǔ)引擎。它使用存儲(chǔ)在內(nèi)存中的內(nèi)容來(lái)創(chuàng)建表,而且數(shù)據(jù)全部放在內(nèi)存中。這些特性與前面的兩個(gè)很不同。

每個(gè)基于MEMORY存儲(chǔ)引擎的表實(shí)際對(duì)應(yīng)一個(gè)磁盤(pán)文件。該文件的文件名與表名相同,類型為frm類型。該文件中只存儲(chǔ)表的結(jié)構(gòu)。而其數(shù)據(jù)文件,都是存儲(chǔ)在內(nèi)存中,這樣有利于數(shù)據(jù)的快速處理,提高整個(gè)表的效率。值得注意的是,服務(wù)器需要有足夠的內(nèi)存來(lái)維持MEMORY存儲(chǔ)引擎的表的使用。如果不需要了,可以釋放內(nèi)存,甚至刪除不需要的表。

MEMORY默認(rèn)使用哈希索引。速度比使用B型樹(shù)索引快。當(dāng)然如果你想用B型樹(shù)索引,可以在創(chuàng)建索引時(shí)指定。

注意,MEMORY用到的很少,因?yàn)樗前褦?shù)據(jù)存到內(nèi)存中,如果內(nèi)存出現(xiàn)異常就會(huì)影響數(shù)據(jù)。如果重啟或者關(guān)機(jī),所有數(shù)據(jù)都會(huì)消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。

四、怎樣選擇存儲(chǔ)引擎

在實(shí)際工作中,選擇一個(gè)合適的存儲(chǔ)引擎是一個(gè)比較復(fù)雜的問(wèn)題。每種存儲(chǔ)引擎都有自己的優(yōu)缺點(diǎn),不能籠統(tǒng)地說(shuō)誰(shuí)比誰(shuí)好。

InnoDB:支持事務(wù)處理,支持外鍵,支持崩潰修復(fù)能力和并發(fā)控制。如果需要對(duì)事務(wù)的完整性要求比較高(比如銀行),要求實(shí)現(xiàn)并發(fā)控制(比如售票),那選擇InnoDB有很大的優(yōu)勢(shì)。如果需要頻繁的更新、刪除操作的數(shù)據(jù)庫(kù),也可以選擇InnoDB,因?yàn)橹С质聞?wù)的提交(commit)和回滾(rollback)。

MyISAM:插入數(shù)據(jù)快,空間和內(nèi)存使用比較低。如果表主要是用于插入新記錄和讀出記錄,那么選擇MyISAM能實(shí)現(xiàn)處理高效率。如果應(yīng)用的完整性、并發(fā)性要求比 較低,也可以使用。

MEMORY:所有的數(shù)據(jù)都在內(nèi)存中,數(shù)據(jù)的處理速度快,但是安全性不高。如果需要很快的讀寫(xiě)速度,對(duì)數(shù)據(jù)的安全性要求較低,可以選擇MEMOEY。它對(duì)表的大小有要求,不能建立太大的表。所以,這類數(shù)據(jù)庫(kù)只使用在相對(duì)較小的數(shù)據(jù)庫(kù)表。

注意,同一個(gè)數(shù)據(jù)庫(kù)也可以使用多種存儲(chǔ)引擎的表。如果一個(gè)表要求比較高的事務(wù)處理,可以選擇InnoDB。這個(gè)數(shù)據(jù)庫(kù)中可以將查詢要求比較高的表選擇MyISAM存儲(chǔ)。如果該數(shù)據(jù)庫(kù)需要一個(gè)用于查詢的臨時(shí)表,可以選擇MEMORY存儲(chǔ)引擎。


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4451

    瀏覽量

    86783
  • 引擎
    +關(guān)注

    關(guān)注

    1

    文章

    363

    瀏覽量

    22796
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    838

    瀏覽量

    27236

原文標(biāo)題:MySQL存儲(chǔ)引擎知多少

文章出處:【微信號(hào):cunchujie,微信公眾號(hào):存儲(chǔ)界】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    云計(jì)算架構(gòu)6? #大數(shù)據(jù) #mysql數(shù)據(jù)庫(kù) #mysql數(shù)據(jù)庫(kù)存儲(chǔ)引擎#硬聲創(chuàng)作季

    云計(jì)算引擎MySQL
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年10月21日 00:25:09

    詳解Mysql數(shù)據(jù)庫(kù)InnoDB存儲(chǔ)引擎事務(wù)

    關(guān)于Mysql數(shù)據(jù)庫(kù)InnoDB存儲(chǔ)引擎事務(wù)的一點(diǎn)理解
    發(fā)表于 05-13 10:11

    mysql存儲(chǔ)引擎選擇方法

    mysql怎么選擇合適的存儲(chǔ)引擎
    發(fā)表于 08-08 07:26

    MySQL存儲(chǔ)引擎簡(jiǎn)析

    MySQL存儲(chǔ)引擎InnoDB??InnoDB 的存儲(chǔ)文件有兩個(gè),后綴名分別是.frm和.idb,其中.frm是表的定義文件,而.idb是數(shù)據(jù)文件。InnoDB 中存在表鎖和行鎖,不過(guò)
    發(fā)表于 09-06 06:07

    MySQL存儲(chǔ)引擎中MyISAM與InnoDB優(yōu)劣勢(shì)比較分析

    使用MySQL當(dāng)然會(huì)接觸到MySQL存儲(chǔ)引擎,在新建數(shù)據(jù)庫(kù)和新建數(shù)據(jù)表的時(shí)候都會(huì)看到。
    的頭像 發(fā)表于 07-18 16:00 ?2778次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>引擎</b>中MyISAM與InnoDB優(yōu)劣勢(shì)比較分析

    關(guān)于mysql存儲(chǔ)引擎你知道多少

    Mysql中用的最多的兩種存儲(chǔ)引擎就是MyISAM和InnDB,其中MyISAM是5.1版本之前的默認(rèn)存儲(chǔ)引擎,InnoDB是5.1版本之后
    發(fā)表于 08-23 10:52 ?913次閱讀

    MySQL存儲(chǔ)引擎完成更新語(yǔ)句執(zhí)行的方法

    首先肯定是我們的系統(tǒng)通過(guò)一個(gè)數(shù)據(jù)庫(kù)連接發(fā)送到了MySQL上,然后肯定會(huì)經(jīng)過(guò)SQL接口、解析器、優(yōu)化器、執(zhí)行器幾個(gè)環(huán)節(jié),解析SQL語(yǔ)句,生成執(zhí)行計(jì)劃,接著去由執(zhí)行器負(fù)責(zé)這個(gè)計(jì)劃的執(zhí)行,調(diào)用InnoDB存儲(chǔ)引擎的接口去執(zhí)行。
    的頭像 發(fā)表于 10-21 10:40 ?2154次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>引擎</b>完成更新語(yǔ)句執(zhí)行的方法

    MySQL存儲(chǔ)引擎使用了三種類型的鎖定機(jī)制

    MySQL數(shù)據(jù)庫(kù)由于其自身架構(gòu)的特點(diǎn),存在多種數(shù)據(jù)存儲(chǔ)引擎,每種存儲(chǔ)引擎的鎖定機(jī)制都是為各自所面對(duì)的特定場(chǎng)景而優(yōu)化設(shè)計(jì),所以各
    的頭像 發(fā)表于 11-17 14:09 ?2289次閱讀
    <b class='flag-5'>MySQL</b>各<b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>引擎</b>使用了三種類型的鎖定機(jī)制

    寫(xiě)一寫(xiě)MySQL常見(jiàn)的引擎

    所謂存儲(chǔ),就是存數(shù)據(jù)的介質(zhì),而存儲(chǔ)引擎就是一種存儲(chǔ)數(shù)據(jù)的方式,就好比磁盤(pán)里的文件系統(tǒng)。
    的頭像 發(fā)表于 02-08 09:50 ?1020次閱讀

    有哪些不同的MySQL數(shù)據(jù)庫(kù)引擎

    數(shù)據(jù)庫(kù)引擎MySQL組件,可以處理SQL操作,例如從數(shù)據(jù)庫(kù)創(chuàng)建、讀取和更新數(shù)據(jù)。MySQL中有兩種類型的引擎:事務(wù)性和非事務(wù)性。
    的頭像 發(fā)表于 04-03 16:38 ?1336次閱讀

    MySQL的整體邏輯架構(gòu)

    支持多種存儲(chǔ)引擎是眾所周知的MySQL特性,也是MySQL架構(gòu)的關(guān)鍵優(yōu)勢(shì)之一。如果能夠理解MySQL Server與
    的頭像 發(fā)表于 04-30 11:14 ?593次閱讀
    <b class='flag-5'>MySQL</b>的整體邏輯架構(gòu)
    主站蜘蛛池模板: 人人干在线观看 | 午夜性影院 | 韩国在线a免费观看网站 | 中文字幕精品一区二区三区视频 | 激情狠狠干 | 色www免费视频 | 狠狠干网站 | 欧美日韩乱国产 | 开心综合网 | 成人午夜影院在线观看 | 黄 色 成 年人在线 黄a大片 | 91色视| 一区二区三区影视 | 午夜视频国产 | 特级黄视频| 2017亚洲男人天堂 | 日本高清色视频在线观看免费 | 亚洲综合色dddd26 | 国内一级野外a一级毛片 | 欧美四级在线 | 亚洲精品国产自在久久出水 | 日韩美女拍拍免费视频网站 | 色综合色狠狠天天综合色hd | 久久久国产高清 | 欧美网色 | 美日毛片 | 成年网站在线播放 | 国产网站免费观看 | 日本黄色影片在线观看 | 男女爱爱视频免费 | 久久噜国产精品拍拍拍拍 | 日韩三级在线免费观看 | 免费看国产一级特黄aa大片 | 狠狠五月深爱婷婷网 | 香蕉视频黄色在线观看 | 亚洲国产午夜看片 | 月夜免费观看完整视频 | 国产尤物在线视频 | 久久婷婷午色综合夜啪 | 国产片一级特黄aa的大片 | 35pao免费视频 |