MySQL系列 MySQL高階 09儲存引擎

2022-02-03 03:42:42 字數 2546 閱讀 7848

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 0基礎高階之mysql介紹《01》

每達到50瀏覽更新一篇,感謝大家推薦 mysql是最流行的關係型資料庫管理系統,在web應用方面mysql是最好的rdbms relational database management system 關聯式資料庫管理系統 應用軟體之一。資料庫 database 是按照資料結構來組織 儲存和管理資料...

edgex高階系列 0 概述

本節類似圖書裡的前言,旨在說明這一系列文章的寫作目的 目標讀者等內容。本系列的主要目的是總結近期對edgex的學習和探索,謝謝在edgex上擴充套件的思路,希望能幫到同樣在使用edgex的同學。注 通用能力。介紹edgex原始碼中的一部分通用能力,如配置載入 服務間呼叫 自定義裝置服務。實現tcp協...

mysql 高階 mysql高階知識

一.儲存引擎 引擎 指的是乙個系統的核心部分 引擎有不同分類是為了適應不同的使用場景 檢視mysql支援所有引擎 show engines mrg myisam 是一堆myisam表的集合 用於做水平分表,如果乙個表中資料量太大 將導致效率降低 水平分表就是把整個大表拆成不同的小表,每一次查詢 會判...