日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL存储引擎比较

發(fā)布時(shí)間:2025/3/14 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL存储引擎比较 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL常用的存儲(chǔ)引擎為MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事務(wù)安全表,其他存儲(chǔ)引擎都是非事務(wù)安全表。?

MyISAM是MySQL的默認(rèn)存儲(chǔ)引擎。MyISAM不支持事務(wù)、也不支持外鍵,但其訪問(wèn)速度快,對(duì)事務(wù)完整性沒(méi)有要求。?

InnoDB存儲(chǔ)引擎提供了具有提交、回滾和崩潰恢復(fù)能力的事務(wù)安全。但是比起MyISAM存儲(chǔ)引擎,InnoDB寫(xiě)的處理效率差一些并且會(huì)占用更多的磁盤(pán)空間以保留數(shù)據(jù)和索引。?

MEMORY存儲(chǔ)引擎使用存在內(nèi)存中的內(nèi)容來(lái)創(chuàng)建表。每個(gè)MEMORY表只實(shí)際對(duì)應(yīng)一個(gè)磁盤(pán)文件。MEMORY類(lèi)型的表訪問(wèn)非常得快,因?yàn)樗臄?shù)據(jù)是放在內(nèi)存中的,并且默認(rèn)使用HASH索引。但是一旦服務(wù)關(guān)閉,表中的數(shù)據(jù)就會(huì)丟失掉。?

MERGE存儲(chǔ)引擎是一組MyISAM表的組合,這些MyISAM表必須結(jié)構(gòu)完全相同。MERGE表本身沒(méi)有數(shù)據(jù),對(duì)MERGE類(lèi)型的表進(jìn)行查詢(xún)、更新、刪除的操作,就是對(duì)內(nèi)部的MyISAM表進(jìn)行的。?

MyISAM表還支持3中不同的存儲(chǔ)格式:?
1 靜態(tài)表?
2 動(dòng)態(tài)表?
3 壓縮表?
靜態(tài)表是默認(rèn)的存儲(chǔ)格式,靜態(tài)表中的字段都是非變長(zhǎng)的字段,優(yōu)點(diǎn)是:存儲(chǔ)非常迅速,容易緩存,出現(xiàn)故障容易恢復(fù);缺點(diǎn)是:占用的空間通常比動(dòng)態(tài)表多。(注意: 在存儲(chǔ)時(shí),列的寬度不足時(shí),用空格補(bǔ)足,當(dāng)時(shí)在訪問(wèn)的時(shí)候并不會(huì)得到這些空格)?
動(dòng)態(tài)表的字段是變長(zhǎng)的,優(yōu)點(diǎn)是:占用的空間相對(duì)較少,但是頻繁地更新刪除記錄會(huì)產(chǎn)生碎片,需要定期改善性能,并且出現(xiàn)故障的時(shí)候恢復(fù)相對(duì)比較困難。?
壓縮表占用磁盤(pán)空間小,每個(gè)記錄是被單獨(dú)壓縮的,所以只有非常小的訪問(wèn)開(kāi)支。?

MySQL支持外鍵存儲(chǔ)引擎只有InnoDB,在創(chuàng)建外鍵的時(shí)候,要求附表必須有對(duì)應(yīng)的索引,子表在創(chuàng)建外鍵的時(shí)候也會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的索引。?
InnoDB存儲(chǔ)方式為兩種:1 使用共享表空間存儲(chǔ) 2 使用多表空間?

MEMORY類(lèi)型的存儲(chǔ)引擎主要用于那些內(nèi)容變化不頻繁的代碼表,或者作為統(tǒng)計(jì)操作的中間結(jié)果表,便于高效地堆中間結(jié)果進(jìn)行分析并得到最終的統(tǒng)計(jì)結(jié)果。對(duì)MEMORY存儲(chǔ)引擎的表進(jìn)行更新操作要謹(jǐn)慎,因?yàn)閿?shù)據(jù)并沒(méi)有實(shí)際寫(xiě)入到磁盤(pán)中,所以一定要對(duì)下次重新啟動(dòng)服務(wù)后如何獲得這些修改后的數(shù)據(jù)有所考慮。?

MERGE用于將一系列等同的MyISAM表以邏輯方式組合在一起,并作為一個(gè)對(duì)象引用它。MERGE表的優(yōu)點(diǎn)在于可以突破對(duì)單個(gè)MyISAM表大小的限制,通過(guò)將不同的表分布在多個(gè)磁盤(pán)上,可以有效的改善MERGE表的訪問(wèn)效率。?

?

另一篇:-)

?

?

這段時(shí)間在看《High Performance?MySQL》,看到存儲(chǔ)引擎這個(gè)地方感到很多細(xì)節(jié)比較陌生,所以總結(jié)小記一些

為了適應(yīng)各種不同的運(yùn)行環(huán)境,MYSQL提供了多種不同的存儲(chǔ)引擎(Storage?Engine ),在應(yīng)用程序開(kāi)發(fā)這個(gè)層面上,開(kāi)發(fā)者可以根據(jù)不同的需求選擇適合的Storage?Engine 方案,更為靈活的是,你可以根據(jù)每張表將要存儲(chǔ)數(shù)據(jù)的特點(diǎn),選擇不同的Storage?Engine,也就是說(shuō),在一個(gè)MYSQL數(shù)據(jù)庫(kù)中,可以混合使用多種不同的Storage?Engine

首先小瞥一下MySQL的體系結(jié)構(gòu),在最高抽象層度下,可以用Garlan & Shaw的分層結(jié)構(gòu)體系來(lái)表示(左)

其中應(yīng)用層為所有RDBMS用戶(hù)提供用戶(hù)接口,邏輯層包括了所有核心功能的實(shí)現(xiàn),物理層則負(fù)責(zé)將數(shù)據(jù)存儲(chǔ)在硬件設(shè)備上。

圖中右側(cè)更為具體的描述了邏輯層的組成,查詢(xún)處理子系統(tǒng)、事務(wù)管理子系統(tǒng)、恢復(fù)管理子系統(tǒng)和存儲(chǔ)管理子系統(tǒng)共同組成了MySQL的邏輯層。相信Storage?Engine的位置是在Storage?Management處,既Storage?Engine屬于Storage?Management子系統(tǒng)的一部分

為了讓思路更清晰一些,下面給出一幅比較全面的體系結(jié)構(gòu)圖(或更確切的說(shuō)是流程圖,只是忽略了反饋)

上面三幅圖來(lái)自于一篇非官方(不保證百分百的正確)的MySQL體系結(jié)構(gòu)的報(bào)告,與《High Performance?MySQL》一書(shū)中給出的MySQL大體結(jié)構(gòu)(下圖,基本對(duì)應(yīng)于Logic Layer,從第一幅圖右側(cè)可以看出MySQL?logic layer同樣遵從分層體系結(jié)構(gòu))還是比較吻合的。
?
連接上圖中第二層和第三層之間的接口是并不針對(duì)任何存儲(chǔ)引擎的單一API,.大概由20個(gè)基本的類(lèi)似“啟動(dòng)事務(wù),返回結(jié)果集”等函數(shù)組成。存儲(chǔ)引擎并不處理SQL,相互之間也不通信,它們的任務(wù)只是簡(jiǎn)單的響應(yīng)高層傳來(lái)的請(qǐng)求。

存儲(chǔ)引擎各自的一些特點(diǎn)?

上面提到的四種存儲(chǔ)引擎都有各自適用的環(huán)境,這取決于它們獨(dú)有的一些特征。主要體現(xiàn)在性能、事務(wù)、并發(fā)控制、參照完整性、緩存、 故障恢復(fù),備份及回存等幾個(gè)方面


目前比較普及的存儲(chǔ)引擎是MyISAM和InnoDB.而MyISAM又是絕大部分Web應(yīng)用的首選。MyISAM與InnoDB的主要的不同點(diǎn)在于性能和事務(wù)控制上。

MyISAM是早期ISAM(Indexed Sequential Access Method,我現(xiàn)在用的MySQL5.0已經(jīng)不支持ISAM了)的擴(kuò)展實(shí)現(xiàn),ISAM被設(shè)計(jì)為適合處理讀頻率遠(yuǎn)大于寫(xiě)頻率這樣一種情況,因此ISAM以及后來(lái)的MyISAM都沒(méi)有考慮對(duì)事物的支持,排除了TPM,不需要事務(wù)記錄,ISAM的查詢(xún)效率相當(dāng)可觀,而且內(nèi)存占用很少。MyISAM在繼承了這類(lèi)優(yōu)點(diǎn)的同時(shí),與時(shí)俱進(jìn)的提供了大量實(shí)用的新特性和相關(guān)工具。例如考慮到并發(fā)控制,提供了表級(jí)鎖,雖然MyISAM本身不支持容錯(cuò),但可以通過(guò)myisamchk進(jìn)行故障恢復(fù)。而且由于MyISAM是每張表使用各自獨(dú)立的存儲(chǔ)文件(MYD數(shù)據(jù)文件和MYI索引文件),使得備份及恢復(fù)十分方便(拷貝覆蓋即可),而且還支持在線(xiàn)恢復(fù)。

所以如果你的應(yīng)用是不需要事務(wù),處理的只是基本的CRUD操作,那么MyISAM是不二選擇

InnoDB被設(shè)計(jì)成適用于高并發(fā)讀寫(xiě)的情況.使用MVCC(Multi-Version Concurrency Control)以及行級(jí)鎖來(lái)提供遵從ACID的事務(wù)支持。InnoDB支持外鍵參照完整性,具備故障恢復(fù)能力。另外 InnoDB的性能其實(shí)還是不錯(cuò)的,特別是在處理大數(shù)據(jù)量的情況下,用官方的話(huà)說(shuō)就是: InnoDB的CPU效率是其他基于磁盤(pán)的關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)引擎所不能比的。不過(guò)InnoDB的備份恢復(fù)要麻煩一點(diǎn),除非你使用了4.1以后版本提供的Mulit-tablespace支持,因?yàn)镮nnoDB和MyISAM不同,他的數(shù)據(jù)文件并不是獨(dú)立對(duì)應(yīng)于每張表的。而是使用的共享表空間,簡(jiǎn)單的拷貝覆蓋方法對(duì)他不適用,必須在停掉MYSQL后對(duì)進(jìn)行數(shù)據(jù)恢復(fù)。使用Per-Table Tablespacesd,使其每張表對(duì)應(yīng)一個(gè)獨(dú)立的表空間文件,則情況要簡(jiǎn)單很多。

一般來(lái)說(shuō),如果需要事務(wù)支持,并且有較高的并發(fā)讀寫(xiě)頻率,InnoDB是不錯(cuò)的選擇。要是并發(fā)讀寫(xiě)頻率不高的話(huà),其實(shí)可以考慮BDB,但由于在MySQL5.1及其以后版本中,將不再提供BDB支持。這個(gè)選項(xiàng)也就沒(méi)有了

至于Heap和BDB(Berkeley DB),相對(duì)來(lái)說(shuō),普及率不如前兩種,但在有些情況下,還是挺適用的

Heap存儲(chǔ)引擎就是將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,由于沒(méi)有磁盤(pán)I./O的等待,速度極快。但由于是內(nèi)存存儲(chǔ)引擎,所做的任何修改在服務(wù)器重啟后都將消失。
?
Heap挺適合做測(cè)試的時(shí)候使用


BDB是MySQL第一款事務(wù)安全的存儲(chǔ)引擎。在Berkeley DB database library的基礎(chǔ)上建立,同樣是事務(wù)安全的,但BDB的普及率顯然不及InnoDB,因?yàn)榇蠖鄶?shù)在MySQL中尋找支持事務(wù)的存儲(chǔ)引擎的同時(shí)也在找支持MVCC或是行級(jí)鎖定存儲(chǔ)引擎,而B(niǎo)DB只支持Page-level Lock。

?

?

附上一張《High Performance?MySQL》 中的各存儲(chǔ)引擎的特性表

Attribute

MyISAM

Heap

BDB

InnoDB

Transactions

No

No

Yes

Yes

Lock granularity

Table

Table

Page (8 KB)

Row

Storage

Split files

In-memory

Single file per table

Tablespace(s)

Isolation levels

None

None

Read committed

All

Portable format

Yes

N/A

No

Yes

Referential integrity

No

No

No

Yes

Primary key with data

No

No

Yes

Yes

MySQL?caches data records

No

Yes

Yes

Yes

Availability

All versions

All versions

MySQL-Max

All Versions

轉(zhuǎn)載于:https://www.cnblogs.com/wayne173/p/3747280.html

總結(jié)

以上是生活随笔為你收集整理的MySQL存储引擎比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。