九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
MySQL: InnoDB 還是 MyISAM?

MyISAM存儲(chǔ)引擎

       MyISAM是 默認(rèn)存儲(chǔ)引擎。它基于更老的ISAM代碼,但有很多有用的擴(kuò)展。MyISAM存儲(chǔ)引擎的一些特征:
·      所有數(shù)據(jù)值先存儲(chǔ)低字節(jié)。這使得數(shù)據(jù)機(jī)和操作系統(tǒng)分離。二進(jìn)制輕便性的唯一要求是機(jī)器使用補(bǔ)碼(如最近20年的機(jī)器有的一樣)和IEEE浮點(diǎn)格式(在主流機(jī)器中也完全是主導(dǎo)的)。唯一不支持二進(jìn)制兼容性的機(jī)器是嵌入式系統(tǒng)。這些系統(tǒng)有時(shí)使用特殊的處理器。

·        先存儲(chǔ)數(shù)據(jù)低字節(jié)并不嚴(yán)重地影響速度;數(shù)據(jù)行中的字節(jié)一般是未聯(lián)合的,從一個(gè)方向讀未聯(lián)合的字節(jié)并不比從反向讀更占用更多的資源。服務(wù)器上的獲取列值的代碼與其它代碼相比并不顯得時(shí)間緊。

·        大文件(達(dá)63位文件長度)在支持大文件的文件系統(tǒng)和操作系統(tǒng)上被支持。

·         當(dāng)把刪除和更新及插入混合的時(shí)候,動(dòng)態(tài)尺寸的行更少碎片。這要通過合并相鄰被刪除的塊,以及若下一個(gè)塊被刪除,就擴(kuò)展到下一塊來自動(dòng)完成。

·         每個(gè)MyISAM表最大索引數(shù)是64。 這可以通過重新編譯來改變。每個(gè)索引最大的列數(shù)是16個(gè)。

·         最大的鍵長度是1000字節(jié)。這也可以通過編譯來改變。對(duì)于鍵長度超過250字節(jié)的情況,一個(gè)超過1024字節(jié)的的鍵塊被用上。

·         BLOB和TEXT列可以被索引。

·         NULL值被允許在索引的列中。這個(gè)占每個(gè)鍵的0-1個(gè)字節(jié)。

·         所有數(shù)字鍵值以高字節(jié)為先被存儲(chǔ)以允許一個(gè)更高地索引壓縮。

·        當(dāng)記錄以排好序的順序插入(就像你使用一個(gè)AUTO_INCREMENT列之時(shí)),索引樹被劈開以便高節(jié)點(diǎn)僅包含一個(gè)鍵。這改善了索引樹的空間利用率。

·         每表一個(gè)AUTO_INCREMEN列的內(nèi)部處理。MyISAM為INSERT和UPDATE操作自動(dòng)更新這一 列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂?shù)闹当粍h除之后就不能再利用。(當(dāng)AUTO_INCREMENT列被定義為多列索 引的最后一列,可以出現(xiàn)重使用從序列頂部刪除的值的情況 )。AUTO_INCREMENT值可用ALTER TABLE或myisamch來重置。

·         如果數(shù)據(jù)文件中間的表沒有自由塊了,在其它線程從表讀的同時(shí),你可以INSERT新行到表中。(這被認(rèn)識(shí)為并發(fā)操作 )。自由塊的出現(xiàn)是作為刪除行的結(jié)果,或者是用比當(dāng)前內(nèi)容多的數(shù)據(jù)對(duì)動(dòng)態(tài)長度行更新的結(jié)果。當(dāng)所有自由塊被用完(填滿),未來的插入又變成并發(fā)。

·         你可以把數(shù)據(jù)文件和索引文件放在不同目錄,用DATA DIRECTORY和INDEX DIRECTORY選項(xiàng)CREATE TABLE以獲得更高的速度,請(qǐng)參閱13.1.5節(jié),“CREATE TABLE語法”。

·         每個(gè)字符列可以又不同的字符集。

·         在MyISAM索引文件里又一個(gè)標(biāo)志,它表明表是否被正確關(guān)閉。如果用--myisam-recover選項(xiàng)啟動(dòng)mysqld,MyISAM表在打開得時(shí)候被自動(dòng)檢查,如果被表被不恰當(dāng)?shù)仃P(guān)閉,就修復(fù)表。

·         如果你用--update-state選項(xiàng)運(yùn)行myisamchk,它標(biāo)注表為已檢查。myisamchk --fast只檢查那些沒有這個(gè)標(biāo)志的表。

·         myisamchk --analyze為部分鍵存儲(chǔ)統(tǒng)計(jì)信息,也為整個(gè)鍵存儲(chǔ)統(tǒng)計(jì)信息。

·         myisampack可以打包BLOB和VARCHAR列。

MyISAM也支持下列特征:

·         支持true VARCHAR類型;VARCHAR列以存儲(chǔ)在2個(gè)字節(jié)中的長度來開始。

·         有VARCHAR的表可以有固定或動(dòng)態(tài)記錄長度。

·         VARCHAR和CHAR列可以多達(dá)64KB。

·         一個(gè)被搞亂的已計(jì)算索引對(duì)可對(duì)UNIQUE來使用。這允許你在表內(nèi)任何列的合并上有UNIQUE。(盡管如此,你不能在一個(gè)UNIQUE已計(jì)算索引上搜索)。

InnoDB存儲(chǔ)引擎

InnoDB給MySQL提供 了具有提交,回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID兼容)存儲(chǔ)引擎。InnoDB鎖定在行級(jí)并且也在SELECT語句提供一個(gè)Oracle風(fēng)格一致的非 鎖定讀。這些特色增加 了多用戶部署和性能。沒有在InnoDB中擴(kuò)大鎖定的需要,因?yàn)樵贗nnoDB中行級(jí)鎖定適合非常小的空間。InnoDB也支持FOREIGN KEY強(qiáng)制。在SQL查詢中,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個(gè)查詢中也可以混合。

InnoDB是為處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì)。它的CPU效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫引擎所不能匹敵的。

InnoDB存儲(chǔ)引擎被完全與MySQL服務(wù)器整合,InnoDB存儲(chǔ)引擎為在主內(nèi)存中緩存數(shù)據(jù)和索引而維持它自己的緩沖池。 InnoDB存儲(chǔ)它的表&索引在一個(gè)表空間中,表空間可以包含數(shù)個(gè)文件(或原始磁盤分區(qū))。這與MyISAM表不同,比如在MyISAM表中每個(gè)表被存在 分離的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統(tǒng)上。

InnoDB默認(rèn)地被包含在MySQL二進(jìn)制分發(fā)中。Windows Essentials installer使InnoDB成為Windows上MySQL的 默認(rèn)表。

InnoDB被用來在眾多需要高性能的大型數(shù)據(jù)庫站點(diǎn)上產(chǎn)生。著名的Internet新聞?wù)军c(diǎn)Slashdot.org運(yùn)行在 InnoDB上。Mytrix, Inc.在InnoDB上存儲(chǔ)超過1TB的數(shù)據(jù),還有一些其它站點(diǎn)在InnoDB上處理平均每秒800次插入/更新的負(fù)荷。

InnoDB和MyISAM的區(qū)別

區(qū)別概述:

MyISAM 是MySQL中默認(rèn)的存儲(chǔ)引擎,一般來說不是有太多人關(guān)心這個(gè)東西。決定使用什么樣的存儲(chǔ)引擎是一個(gè)很tricky的事情,但是還是值我們?nèi)パ芯恳幌?,這里的文章只考慮 MyISAM 和InnoDB這兩個(gè),因?yàn)檫@兩個(gè)是最常見的。

下面先讓我們回答一些問題:

  • 你的數(shù)據(jù)庫有外鍵嗎?
  • 你需要事務(wù)支持嗎?
  • 你需要全文索引嗎?
  • 你經(jīng)常使用什么樣的查詢模式?
  • 你的數(shù)據(jù)有多大?

 

思考上面這些問題可以讓你找到合適的方向,但那并不是絕對(duì)的。如果你需要事務(wù)處理或是外鍵,那么InnoDB 可能是比較好的方式。如果你需要全文索引,那么通常來說 MyISAM是好的選擇,因?yàn)檫@是系統(tǒng)內(nèi)建的,然而,我們其實(shí)并不會(huì)經(jīng)常地去測試兩百萬行記錄。所以,就算是慢一點(diǎn),我們可以通過使用Sphinx從 InnoDB中獲得全文索引。

數(shù)據(jù)的大小,是一個(gè)影響你選擇什么樣存儲(chǔ)引擎的重要因素,大尺寸的數(shù)據(jù)集趨向于選擇InnoDB方式,因?yàn)槠渲С质聞?wù)處理和故障恢復(fù)。數(shù)據(jù)庫的在小 決定了故障恢復(fù)的時(shí)間長短,InnoDB可以利用事務(wù)日志進(jìn)行數(shù)據(jù)恢復(fù),這會(huì)比較快。而MyISAM可能會(huì)需要幾個(gè)小時(shí)甚至幾天來干這些事,InnoDB 只需要幾分鐘。

您操作數(shù)據(jù)庫表的習(xí)慣可能也會(huì)是一個(gè)對(duì)性能影響很大的因素。比如: COUNT() 在 MyISAM 表中會(huì)非???,而在InnoDB 表下可能會(huì)很痛苦。而主鍵查詢則在InnoDB下會(huì)相當(dāng)相當(dāng)?shù)目欤枰⌒牡氖侨绻覀兊闹麈I太長了也會(huì)導(dǎo)致性能問題。大批的inserts 語句在MyISAM下會(huì)快一些,但是updates 在InnoDB 下會(huì)更快一些——尤其在并發(fā)量大的時(shí)候。

所以,到底你檢使用哪一個(gè)呢?根據(jù)經(jīng)驗(yàn)來看,如果是一些小型的應(yīng)用或項(xiàng)目,那么MyISAM 也許會(huì)更適合。當(dāng)然,在大型的環(huán)境下使用MyISAM 也會(huì)有很大成功的時(shí)候,但卻不總是這樣的。如果你正在計(jì)劃使用一個(gè)超大數(shù)據(jù)量的項(xiàng)目,而且需要事務(wù)處理或外鍵支持,那么你真的應(yīng)該直接使用InnoDB方 式。但需要記住InnoDB 的表需要更多的內(nèi)存和存儲(chǔ),轉(zhuǎn)換100GB 的MyISAM 表到InnoDB 表可能會(huì)讓你有非常壞的體驗(yàn)。

區(qū)別總結(jié):

1.InnoDB不支持FULLTEXT類型的索引。
2.InnoDB 中不保存表的具體行數(shù),也就是說,執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來計(jì)算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語句包含 where條件時(shí),兩種表的操作是一樣的。
3.對(duì)于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。
4.DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除。
5.LOAD TABLE FROM MASTER操作對(duì)InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對(duì)于使用的額外的InnoDB特性(例如外鍵)的表不適用。

另外,InnoDB表的行鎖也不是絕對(duì)的,如果在執(zhí)行一個(gè)SQL語句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì)鎖全表,例如update table set num=1 where name like “%aaa%”

 

提升InnoDB性能的方法:

MyISAM和InnoDB存儲(chǔ)引擎性能差別并不是很大,針對(duì)InnoDB來說,影響性能的主要是 innodb_flush_log_at_trx_commit 這個(gè)選項(xiàng),如果設(shè)置為1的話,那么每次插入數(shù)據(jù)的時(shí)候都會(huì)自動(dòng)提交,導(dǎo)致性能急劇下降,應(yīng)該是跟刷新日志有關(guān)系,設(shè)置為0效率能夠看到明顯提升,當(dāng)然,同 樣你可以SQL中提交“SET AUTOCOMMIT = 0”來設(shè)置達(dá)到好的性能。另外,還聽說通過設(shè)置innodb_buffer_pool_size能夠提升InnoDB的性能,但是我測試發(fā)現(xiàn)沒有特別明顯 的提升。

基本上我們可以考慮使用InnoDB來替代我們的MyISAM引擎了,因?yàn)镮nnoDB自身很多良好的特點(diǎn),比如事務(wù)支持、存儲(chǔ) 過程、視圖、行級(jí)鎖定等等,在并發(fā)很多的情況下,相信InnoDB的表現(xiàn)肯定要比MyISAM強(qiáng)很多,當(dāng)然,相應(yīng)的在my.cnf中的配置也是比較關(guān)鍵 的,良好的配置,能夠有效的加速你的應(yīng)用。
任何一種表都不是萬能的,只用恰當(dāng)?shù)尼槍?duì)業(yè)務(wù)類型來選擇合適的表類型,才能最大的發(fā)揮MySQL的性能優(yōu)勢(shì)。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Mysql存儲(chǔ)引擎MyISAM的常見問題(表損壞、無法訪問、磁盤空間不足)
mysql 的存儲(chǔ)引擎介紹
各種存儲(chǔ)引擎的特性
什么是InnoDB
MySQL架構(gòu)介紹(5.存儲(chǔ)引擎)
Mysql 中 MyISAM 和 InnoDB 的區(qū)別有哪些?
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服