MySQL 常用資料儲存引擎區別

2022-08-31 11:12:07 字數 2546 閱讀 3872

mysql有多種儲存引擎,目前常用的是 myisam 和 innodb 這兩個引擎,除了這兩個引擎以為還有許多其他引擎,有官方的,也有一些公司自己研發的。這篇文章主要簡單概述一下常用常見的 mysql 引擎,一則這是面試中常被問到的問題,二則這也是資料庫設計中不可忽略的問題,用合適的引擎可以更好的適應業務場景,提高業務效率。

myisam 是 mysql 5.5.5 之前的預設引擎,它支援 b-tree/fulltext/r-tree 索引型別。

鎖級別為表鎖,表鎖優點是開銷小,加鎖快;缺點是鎖粒度大,發生鎖衝動概率較高,容納併發能力低,這個引擎適合查詢為主的業務。

此引擎不支援事務,也不支援外來鍵。

myisam強調了快速讀取操作。它儲存表的行數,於是select count(*) from table時只需要直接讀取已經儲存好的值而不需要進行全表掃瞄。

innodb 儲存引擎最大的亮點就是支援事務,支援回滾,它支援 hash/b-tree 索引型別。

鎖級別為行鎖,行鎖優點是適用於高併發的頻繁表修改,高併發是效能優於 myisam。缺點是系統消耗較大,索引不僅快取自身,也快取資料,相比 myisam 需要更大的記憶體。

innodb 中不儲存表的具體行數,也就是說,執行 select count(*) from table時,innodb 要掃瞄一遍整個表來計算有多少行。

支援事務,支援外來鍵。

a事務的原子性(atomicity):指乙個事務要麼全部執行,要麼不執行。也就是說乙個事務不可能只執行了一半就停止了。比如你從取款機取錢,這個事務可以分成兩個步驟:1)劃卡,2)出錢。不可能劃了卡,而錢卻沒出來,這兩步必須同時完成,要麼就不完成。

c事務的一致性(consistency):指事務的執行並不改變資料庫中資料的一致性。例如,完整性約束了a+b=10,乙個事務改變了a,那麼b也應該隨之改變。

i獨立性(isolation):事務的獨立性也有稱作隔離性,是指兩個以上的事務不會出現交錯執行的狀態。因為這樣可能會導致資料不一致。

d永續性(durability):事務的永續性是指事務執行成功以後,該事務所對資料庫所作的更改便是持久的儲存在資料庫之中,不會無緣無故的回滾。

memory 是記憶體級別儲存引擎,資料儲存在記憶體中,所以他能夠儲存的資料量較小。

因為記憶體的特性,儲存引擎對資料的一致性支援較差。鎖級別為表鎖,不支援事務。但訪問速度非常快,並且預設使用 hash 索引。

memory儲存引擎使用存在記憶體中的內容來建立表,每個memory表只實際對應乙個磁碟檔案,在磁碟中表現為.frm檔案。

myisam

innodb

儲存結構

每張表被存放在三個檔案:frm-格定義myd(mydata)-資料檔案myi(myindex)-索引檔案

所有的表都儲存在同乙個資料檔案中(也可能是多個檔案,或者是獨立的表空間檔案),innodb表的大小只受限於作業系統檔案的大小,一般為2gb

儲存空間

myisam可被壓縮,儲存空間較小

innodb的表需要更多的記憶體和儲存,它會在主記憶體中建立其專用的緩衝池用於高速緩衝資料和索引

可移植性、備份及恢復

由於myisam的資料是以檔案的形式儲存,所以在跨平台的資料轉移中會很方便。在備份和恢復時可單獨針對某個表進行操作

免費的方案可以是拷貝資料檔案、備份 binlog,或者用 mysqldump,在資料量達到幾十g的時候就相對痛苦了

事務安全

不支援 每次查詢具有原子性

支援 具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (acid compliant))型表

auto_increment

myisam表可以和其他字段一起建立聯合索引

innodb中必須包含只有該字段的索引

select

myisam更優

insert

innodb更優

update

innodb更優

delete

innodb更優 它不會重新建立表,而是一行一行的刪除

count without where

myisam更優。因為myisam儲存了表的具體行數

innodb沒有儲存表的具體行數,需要逐行掃瞄統計,就很慢了

count with where

一樣一樣,innodb也會鎖表

鎖只支援表鎖

支援表鎖、行鎖 行鎖大幅度提高了多使用者併發操作的新能。但是innodb的行鎖,只是在where的主鍵是有效的,非主鍵的where都會鎖全表的

外來鍵不支援

支援fulltext全文索引

支援不支援(5.6.4以上支援英文全文索引) 可以通過使用sphinx從innodb中獲得全文索引,會慢一點

網際網路專案中隨著硬體成本的降低及快取、中介軟體的應用,一般我們選擇都以 innodb 儲存引擎為主,很少再去選擇 myisam 了。而業務真發展的一定程度時,自帶的儲存引擎無法滿足時,這時公司應該是有實力去自主研發滿足自己需求的儲存引擎或者購買商用的儲存引擎了。

mysql常用的儲存引擎及區別

mysql 常見的儲存引擎,可以使用命令 show engines 來列出所有的儲存引擎。儲存引擎是資料庫的核心,在mysql中,儲存引擎是以外掛程式的形式執行的。支援的引擎有十幾種之多,但我們實戰常用到的,大概只有innodb myisam memory 和merge等。為什麼先說innodb?i...

MYSQL常用儲存引擎

一 innodb 儲存引擎 innodb 儲存引擎自 mysql 5.5 版本起被指定為預設的儲存引擎,用於完成事務 回滾 崩潰修復和多版本併發控制的事務安全處理。同時也是 mysql中第乙個提供外來鍵約束的表引擎,尤其對事務處理的能力,是 mysql 其他儲存引擎所無法與之比擬的。innodb 的...

常用Mysql儲存引擎

innodb是事務型資料庫的首選引擎,支援事物安全表 acid 支援行鎖定和外來鍵。mysql5.5.5之後,innodb作為預設引擎。innodb主要特性 1.innodb給mysql提供 回滾和崩潰恢復能力的事物安全 acid相容 儲存引擎。innodb鎖定在行級並且也在select語句中提供乙...