ISAM、MyISAM、InnoDB、ACID详解
文章目錄
- 1. ISAM
- 2. MyISAM
- 3. InnoDB
- 4. InnoDB與MyISAM差別
- 5. ACID
- Atomic(原子性):
- Consistency(一致性):
- Isolation(隔離性):
- Durability(持久性):
1. ISAM
索引順序存取方法(ISAM, Indexed Sequential Access Method)最初是IBM公司發(fā)展起來的一個(gè)文件系統(tǒng),可以連續(xù)地(按照他們進(jìn)入的順序)或者任意地(根據(jù)索引)記錄任何訪問。
每個(gè)索引定義了一次不同排列的記錄。
2. MyISAM
MyISAM是默認(rèn)存儲引擎(Mysql5.1前)。它基于更老的ISAM代碼,但有很多有用的擴(kuò)展。(注意MySQL 5.1不支持ISAM)。
每個(gè)MyISAM在磁盤上存儲成三個(gè)文件,每一個(gè)文件的名字均以表的名字開始,擴(kuò)展名指出文件類型。
.frm 文件 存儲 表定義;
.MYD (MYData)文件 存儲 表的數(shù)據(jù);
.MYI (MYIndex)文件 存儲 表的索引。
3. InnoDB
InnoDB,是MySQL的數(shù)據(jù)庫引擎之一,現(xiàn)為MySQL的默認(rèn)存儲引擎,為MySQL AB發(fā)布binary的標(biāo)準(zhǔn)之一。
InnoDB 由Innobase Oy公司所開發(fā) ,2006年五月時(shí)由甲骨文公司并購。與傳統(tǒng)的ISAM與MyISAM相比,InnoDB的最大特色就是 支持了ACID兼容的事務(wù)(Transaction)功能 ,類似于PostgreSQL。
InnoDB 物理文件結(jié)構(gòu)為:
-
.frm 文件:與表相關(guān)的元數(shù)據(jù)信息都存放在frm文件,包括表結(jié)構(gòu)的定義信息等;
-
.ibd 文件或 .ibdata 文件: 這兩種文件都是存放 InnoDB 數(shù)據(jù)的文件,之所以有兩種文件形式存放 InnoDB 的數(shù)據(jù),是因?yàn)?InnoDB 的數(shù)據(jù)存儲方式能夠通過配置來決定是使用共享表空間存放存儲數(shù)據(jù),還是用獨(dú)享表空間存放存儲數(shù)據(jù)。
獨(dú)享表空間存儲方式使用.ibd文件,并且每個(gè)表一個(gè).ibd文件;
共享表空間存儲方式使用.ibdata文件,所有表共同使用一個(gè).ibdata文件(或多個(gè),可自己配置)。
4. InnoDB與MyISAM差別
聚簇索引的文件存放在主鍵索引的葉子節(jié)點(diǎn)上,因此 InnoDB 必須要有主鍵,通過主鍵索引效率很高。
但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到數(shù)據(jù)。因此,主鍵不應(yīng)該過大,因?yàn)橹麈I太大,其他索引也都會很大。
而 MyISAM 是非聚集索引,數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨(dú)立的。
而 MyISAM 用一個(gè)變量保存了整個(gè)表的行數(shù),執(zhí)行上述語句時(shí)只需要讀出該變量即可,速度很快;
MyISAM一個(gè)更新語句會鎖住整張表,導(dǎo)致其他查詢和更新都會被阻塞,因此并發(fā)訪問受限。這也是 MySQL 將默認(rèn)存儲引擎從 MyISAM 變成 InnoDB 的重要原因之一;
| 主外鍵 | 不支持 | 支持 |
| 事務(wù) | 不支持 | 支持 |
| 行表鎖 | 表鎖,即使操作一條記錄也會鎖住整個(gè)表,不適合高并發(fā)的操作 | 行鎖,操作時(shí)只鎖某一行,不對其它行有影響,適合高并發(fā)的操作 |
| 緩存 | 只緩存索引,不緩存真實(shí)數(shù)據(jù) | 不僅緩存索引還要緩存真實(shí)數(shù)據(jù),對內(nèi)存要求較高,而且內(nèi)存大小對性能有決定性的影響 |
| 表空間 | 小 | 大 |
| 關(guān)注點(diǎn) | 性能 | 事務(wù) |
| 默認(rèn)安裝 | 是 | 是 |
5. ACID
ACID是:
- Atomic(原子性)
- Consistency(一致性)
- Isolation(隔離性)
- Durability(持久性)
Atomic(原子性):
指 整個(gè)數(shù)據(jù)庫事務(wù)是不可分割的工作單位。只有使數(shù)據(jù)庫中所有的操作執(zhí)行成功,才算整個(gè)事務(wù)成功;事務(wù)中任何一個(gè)SQL語句執(zhí)行失敗,那么已經(jīng)執(zhí)行成功的SQL語句也必須撤銷,數(shù)據(jù)庫狀態(tài)應(yīng)該退回到執(zhí)行事務(wù)前的狀態(tài)。
Consistency(一致性):
指 數(shù)據(jù)庫事務(wù)不能破壞關(guān)系數(shù)據(jù)的完整性以及業(yè)務(wù)邏輯上的一致性。例如對銀行轉(zhuǎn)帳事務(wù),不管事務(wù)成功還是失敗,應(yīng)該保證事務(wù)結(jié)束后ACCOUNTS表中Tom和Jack的存款總額為2000元。
Isolation(隔離性):
指的是在并發(fā)環(huán)境中,當(dāng)不同的事務(wù)同時(shí)操縱相同的數(shù)據(jù)時(shí),每個(gè)事務(wù)都有各自的完整數(shù)據(jù)空間。
Durability(持久性):
指的是只要事務(wù)成功結(jié)束,它對數(shù)據(jù)庫所做的更新就必須永久保存下來。即使發(fā)生系統(tǒng)崩潰,重新啟動數(shù)據(jù)庫系統(tǒng)后,數(shù)據(jù)庫還能恢復(fù)到事務(wù)成功結(jié)束時(shí)的狀態(tài)。
總結(jié)
以上是生活随笔為你收集整理的ISAM、MyISAM、InnoDB、ACID详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 找一个传奇服务端,斗破苍穹斗气化翼版本
- 下一篇: 网络工程师考试-计算机网络笔记