mysql 引擎

1、查看當(dāng)前數(shù)據(jù)庫(kù)支持的引擎和默認(rèn)的數(shù)據(jù)庫(kù)引擎
show engines;
2望艺、更改數(shù)據(jù)庫(kù)引擎
2.1苛秕、更改方式1:修改配置文件my.ini
將my-small.ini另存為my.ini,在[mysqld]后面添加default-storage-engine=InnoDB找默,重啟服務(wù)艇劫,數(shù)據(jù)庫(kù)默認(rèn)的引擎修改為InnoDB

2.2、更改方式2:在建表的時(shí)候指定
建表時(shí)指定:

create table mytbl(   
    id int primary key,   
    name varchar(50)   
)type=MyISAM;

2.3啡莉、更改方式3:建表后更改

alter table mytbl2 type = InnoDB;

3港准、查看修改結(jié)果
方式1:
show table status from mytest;
方式2:
show create table table_name

ACID

  • A 事務(wù)的原子性(Atomicity):指一個(gè)事務(wù)要么全部執(zhí)行,要么不執(zhí)行.也就是說(shuō)一個(gè)事務(wù)不可能只執(zhí)行了一半就停止了.比如你從取款機(jī)取錢,這個(gè)事務(wù)可以分成兩個(gè)步驟:1劃卡,2出錢.不可能劃了卡,而錢卻沒(méi)出來(lái).這兩步必須同時(shí)完成.要么就不完成.

  • C 事務(wù)的一致性(Consistency):指事務(wù)的運(yùn)行并不改變數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性.例如,完整性約束了a+b=10,一個(gè)事務(wù)改變了a,那么b也應(yīng)該隨之改變.

  • I 獨(dú)立性(Isolation):事務(wù)的獨(dú)立性也有稱作隔離性,是指兩個(gè)以上的事務(wù)不會(huì)出現(xiàn)交錯(cuò)執(zhí)行的狀態(tài).因?yàn)檫@樣可能會(huì)導(dǎo)致數(shù)據(jù)不一致.

  • D 持久性(Durability):事務(wù)的持久性是指事務(wù)執(zhí)行成功以后,該事務(wù)所對(duì)數(shù)據(jù)庫(kù)所作的更改便是持久的保存在數(shù)據(jù)庫(kù)之中,不會(huì)無(wú)緣無(wú)故的回滾.

  • Innodb 引擎

Innodb引擎提供了對(duì)數(shù)據(jù)庫(kù)ACID事務(wù)的支持咧欣,并且實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的四種隔離級(jí)別浅缸,關(guān)于數(shù)據(jù)庫(kù)事務(wù)與其隔離級(jí)別的內(nèi)容請(qǐng)見(jiàn)數(shù)據(jù)庫(kù)事務(wù)與其隔離級(jí)別這篇文章。該引擎還提供了行級(jí)鎖和外鍵約束魄咕,它的設(shè)計(jì)目標(biāo)是處理大容量數(shù)據(jù)庫(kù)系統(tǒng)衩椒,它本身其實(shí)就是基于MySQL后臺(tái)的完整數(shù)據(jù)庫(kù)系統(tǒng),MySQL運(yùn)行時(shí)Innodb會(huì)在內(nèi)存中建立緩沖池哮兰,用于緩沖數(shù)據(jù)和索引毛萌。但是該引擎不支持FULLTEXT類型的索引,而且它沒(méi)有保存表的行數(shù)喝滞,當(dāng)SELECT COUNT(*) FROM TABLE時(shí)需要掃描全表阁将。當(dāng)需要使用數(shù)據(jù)庫(kù)事務(wù)時(shí),該引擎當(dāng)然是首選右遭。由于鎖的粒度更小做盅,寫操作不會(huì)鎖定全表,所以在并發(fā)較高時(shí)窘哈,使用Innodb引擎會(huì)提升效率吹榴。但是使用行級(jí)鎖也不是絕對(duì)的,如果在執(zhí)行一個(gè)SQL語(yǔ)句時(shí)MySQL不能確定要掃描的范圍滚婉,InnoDB表同樣會(huì)鎖全表图筹。

  • MyIASM 引擎

MyIASM是MySQL默認(rèn)的引擎,但是它沒(méi)有提供對(duì)數(shù)據(jù)庫(kù)事務(wù)的支持,也不支持行級(jí)鎖和外鍵远剩,因此當(dāng)INSERT(插入)或UPDATE(更新)數(shù)據(jù)時(shí)即寫操作需要鎖定整個(gè)表扣溺,效率便會(huì)低一些。不過(guò)和Innodb不同民宿,MyIASM中存儲(chǔ)了表的行數(shù)娇妓,于是SELECT COUNT(*) FROM TABLE時(shí)只需要直接讀取已經(jīng)保存好的值而不需要進(jìn)行全表掃描。如果表的讀操作遠(yuǎn)遠(yuǎn)多于寫操作且不需要數(shù)據(jù)庫(kù)事務(wù)的支持活鹰,那么MyIASM也是很好的選擇。

——————————————————————————————————————————————————

  • 兩種引擎的選擇

大尺寸的數(shù)據(jù)集趨向于選擇InnoDB引擎只估,因?yàn)樗С质聞?wù)處理和故障恢復(fù)志群。數(shù)據(jù)庫(kù)的大小決定了故障恢復(fù)的時(shí)間長(zhǎng)短,InnoDB可以利用事務(wù)日志進(jìn)行數(shù)據(jù)恢復(fù)蛔钙,這會(huì)比較快锌云。主鍵查詢?cè)贗nnoDB引擎下也會(huì)相當(dāng)快,不過(guò)需要注意的是如果主鍵太長(zhǎng)也會(huì)導(dǎo)致性能問(wèn)題吁脱,關(guān)于這個(gè)問(wèn)題我會(huì)在下文中講到桑涎。大批的INSERT語(yǔ)句(在每個(gè)INSERT語(yǔ)句中寫入多行,批量插入)在MyISAM下會(huì)快一些兼贡,但是UPDATE語(yǔ)句在InnoDB下則會(huì)更快一些攻冷,尤其是在并發(fā)量大的時(shí)候。
——————————————————————————————————————————————————

  • Index——索引

索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)遍希。MyIASM和Innodb都使用了樹(shù)這種數(shù)據(jù)結(jié)構(gòu)做為索引等曼。下面我接著講這兩種引擎使用的索引結(jié)構(gòu),講到這里凿蒜,首先應(yīng)該談一下B-Tree和B+Tree禁谦。

  • MyIASM引擎的索引結(jié)構(gòu)

MyISAM引擎的索引結(jié)構(gòu)為B+Tree,其中B+Tree的數(shù)據(jù)域存儲(chǔ)的內(nèi)容為實(shí)際數(shù)據(jù)的地址废封,也就是說(shuō)它的索引和實(shí)際的數(shù)據(jù)是分開(kāi)的州泊,只不過(guò)是用索引指向了實(shí)際的數(shù)據(jù),這種索引就是所謂的非聚集索引漂洋。如下圖所示:


MyIASM.png

這里設(shè)表一共有三列遥皂,假設(shè)我們以Col1為主鍵,則上圖是一個(gè)MyISAM表的主索引(Primary key)示意氮发】嗜猓可以看出MyISAM的索引文件僅僅保存數(shù)據(jù)記錄的地址。在MyISAM中爽冕,主索引和輔助索引(Secondary key)在結(jié)構(gòu)上沒(méi)有任何區(qū)別仇祭,只是主索引要求key是唯一的,而輔助索引的key可以重復(fù)颈畸。如果我們?cè)贑ol2上建立一個(gè)輔助索引乌奇,則此索引的結(jié)構(gòu)如下圖所示:


731178-20160320204143084-1395279894.png

同樣也是一顆B+Tree没讲,data域保存數(shù)據(jù)記錄的地址。因此礁苗,MyISAM中索引檢索的算法為首先按照B+Tree搜索算法搜索索引爬凑,如果指定的Key存在,則取出其data域的值试伙,然后以data域的值為地址嘁信,讀取相應(yīng)數(shù)據(jù)記錄。
  • Innodb引擎的索引結(jié)構(gòu)

與MyISAM引擎的索引結(jié)構(gòu)同樣也是B+Tree疏叨,但是Innodb的索引文件本身就是數(shù)據(jù)文件潘靖,即B+Tree的數(shù)據(jù)域存儲(chǔ)的就是實(shí)際的數(shù)據(jù),這種索引就是聚集索引蚤蔓。這個(gè)索引的key就是數(shù)據(jù)表的主鍵卦溢,因此InnoDB表數(shù)據(jù)文件本身就是主索引。

并且和MyISAM不同秀又,InnoDB的輔助索引數(shù)據(jù)域存儲(chǔ)的也是相應(yīng)記錄主鍵的值而不是地址单寂,所以當(dāng)以輔助索引查找時(shí),會(huì)先根據(jù)輔助索引找到主鍵吐辙,再根據(jù)主鍵索引找到實(shí)際的數(shù)據(jù)宣决。所以Innodb不建議使用過(guò)長(zhǎng)的主鍵,否則會(huì)使輔助索引變得過(guò)大袱讹。建議使用自增的字段作為主鍵疲扎,這樣B+Tree的每一個(gè)結(jié)點(diǎn)都會(huì)被順序的填滿,而不會(huì)頻繁的分裂調(diào)整捷雕,會(huì)有效的提升插入數(shù)據(jù)的效率椒丧。

兩者區(qū)別:

第一個(gè)重大區(qū)別是InnoDB的數(shù)據(jù)文件本身就是索引文件。從上文知道救巷,MyISAM索引文件和數(shù)據(jù)文件是分離的壶熏,索引文件僅保存數(shù)據(jù)記錄的地址。而在InnoDB中浦译,表數(shù)據(jù)文件本身就是按B+Tree組織的一個(gè)索引結(jié)構(gòu)棒假,這棵樹(shù)的葉節(jié)點(diǎn)data域保存了完整的數(shù)據(jù)記錄。這個(gè)索引的key是數(shù)據(jù)表的主鍵精盅,因此InnoDB表數(shù)據(jù)文件本身就是主索引帽哑。

image

上圖是InnoDB主索引(同時(shí)也是數(shù)據(jù)文件)的示意圖,可以看到葉節(jié)點(diǎn)包含了完整的數(shù)據(jù)記錄叹俏。這種索引叫做聚集索引妻枕。因?yàn)镮nnoDB的數(shù)據(jù)文件本身要按主鍵聚集,所以InnoDB要求表必須有主鍵(MyISAM可以沒(méi)有),如果沒(méi)有顯式指定屡谐,則MySQL系統(tǒng)會(huì)自動(dòng)選擇一個(gè)可以唯一標(biāo)識(shí)數(shù)據(jù)記錄的列作為主鍵述么,如果不存在這種列,則MySQL自動(dòng)為InnoDB表生成一個(gè)隱含字段作為主鍵愕掏,這個(gè)字段長(zhǎng)度為6個(gè)字節(jié)度秘,類型為長(zhǎng)整形。

第二個(gè)與MyISAM索引的不同是InnoDB的輔助索引data域存儲(chǔ)相應(yīng)記錄主鍵的值而不是地址饵撑。換句話說(shuō)剑梳,InnoDB的所有輔助索引都引用主鍵作為data域。例如滑潘,下圖為定義在Col3上的一個(gè)輔助索引:

image

這里以英文字符的ASCII碼作為比較準(zhǔn)則阻荒。聚集索引這種實(shí)現(xiàn)方式使得按主鍵的搜索十分高效,但是輔助索引搜索需要檢索兩遍索引:首先檢索輔助索引獲得主鍵众羡,然后用主鍵到主索引中檢索獲得記錄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蓖租,一起剝皮案震驚了整個(gè)濱河市粱侣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蓖宦,老刑警劉巖齐婴,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異稠茂,居然都是意外死亡柠偶,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門睬关,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诱担,“玉大人,你說(shuō)我怎么就攤上這事电爹∧柘桑” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵丐箩,是天一觀的道長(zhǎng)摇邦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)屎勘,這世上最難降的妖魔是什么施籍? 我笑而不...
    開(kāi)封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮概漱,結(jié)果婚禮上丑慎,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好立哑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布夜惭。 她就那樣靜靜地躺著,像睡著了一般铛绰。 火紅的嫁衣襯著肌膚如雪诈茧。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天捂掰,我揣著相機(jī)與錄音敢会,去河邊找鬼。 笑死这嚣,一個(gè)胖子當(dāng)著我的面吹牛鸥昏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姐帚,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吏垮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了罐旗?” 一聲冷哼從身側(cè)響起膳汪,我...
    開(kāi)封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎九秀,沒(méi)想到半個(gè)月后遗嗽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼓蜒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年痹换,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片都弹。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娇豫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缔杉,到底是詐尸還是另有隱情锤躁,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布或详,位于F島的核電站系羞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏霸琴。R本人自食惡果不足惜椒振,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梧乘。 院中可真熱鬧澎迎,春花似錦庐杨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至哮洽,卻和暖如春填渠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸟辅。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工氛什, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匪凉。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓枪眉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親再层。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贸铜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 但凡死纏爛打的人大都不是真的深愛(ài)你 那只是在跟自己賽跑 真正愛(ài)你的人做不到死纏爛打 因?yàn)樽宰鸩辉试S,我們一直深信 ...
    九小四閱讀 121評(píng)論 0 0