mysql 提供了一套統一的應用開發模型和核心 api,因此,儘管不同的儲存引擎擁有不同的特性,不過對於開發人員,應用操作都是完全透明的。應用層的連線並不直接訪問儲存引擎層,而是訪問 mysql 提供的 api,也就是說不管所操作的表物件使用什麼儲存引擎,讀寫資料時執行的 ddl/dml 語句並沒有不同
下面介紹使用最廣泛的儲存引擎
記憶體儲存引擎,直接把錶儲存到記憶體中,在磁碟中只擁有乙個 .frm 檔案,用來儲存表結構的定義
通過指定 engine=memory 設定
當 mysql 服務關閉時,所有 memory 引擎表中的資料全部會丟失
分配給 memory 引擎表的記憶體,正常情況不會釋放,而是有該錶一直持有,即使刪除資料,也不會被收回,只有當整個表被刪除或者重建時才會**相關記憶體
memory 引擎表占用多少記憶體空間?由兩個因素決定
首先 memory 引擎錶能使用的最大記憶體不能超過 max_heap_table_size 系統設定的值,該值預設情況下是 16mb (還可以在會話時,臨時設定 max_heap_table_size 變數的值)
在建立時通過 create table 語句的 max_rows 選項,指定表中最大的記錄數的方式來限制表能夠使用的記憶體空間
csv 儲存引擎是基於 csv 格式檔案儲存資料
通過指定 engine=csv 設定
csv 儲存引擎因為自身檔案格式的原因,所有列必須強制指定 not null ,另外 csv 引擎也不支援索引,不支援分割槽
csv 儲存引擎也會包含乙個儲存表結構的 .frm 檔案,還會建立乙個 .csv 儲存資料的檔案,還會建立乙個同名的元資訊檔案,該檔案的擴充套件名為 .csm ,用來儲存表的狀態及表中儲存的資料量
因為 csv 檔案本身就可以直接被編輯,保不齊就有不按規則出牌的情況,如果出現csv 檔案中的內容損壞了的情況,也可以使用 check table 或者 repair table 命令檢查和修復
archive 儲存引擎適用場景恰如其名---歸檔,基於這個儲存引擎,能夠將大量資料壓縮儲存,插入的列會被壓縮
使用了 zlib 無損資料壓縮演算法,並且還可以使用 optimize table 分析表並使其打包成更小的格式
相同的資料量,archive 儲存引擎 比 myisam 引擎小了近 8 倍
不足點:
目前 archive 引擎僅能夠支援 insert 和 select 語句,而不能支援 delete、replace、update 語句
不支援索引
archive 引擎除了擁有 .frm 結構檔案外,還有乙個擴充套件名為 .arz 的資料檔案
黑洞儲存引擎,所有插入的資料並不會儲存,blackhole 引擎表永遠保持為空
:) 我這裡沒想到什麼適用場景,故不做太多介紹
merge 儲存引擎,也被稱為 mgr_myisam 儲存引擎,它實際上是將一組 myisam 表聚合在一起,使用時就和一張表一樣
merge 儲存引擎,要求聚合的表結構、索引要完全一致
使用 engine=merge union=(表名,表名) 建立
除了儲存表結構定義的 .frm 檔案外,還有乙個擴充套件名為 .mgr 的檔案,這個檔案不儲存資料,而是儲存的資料**地
merge 儲存引擎出了支援 select 之外,還支援 update、delete 語句
需要支援 insert 語句的話,需要配置 insert_method 指定插入的記錄儲存到哪個表中
insert_method 選項有三個值
no: 不允許插入,這也是預設值
first 插入到第乙個表
last 插入到最後乙個表
如果沒有指定表使用的儲存引擎,那麼建立表的預設儲存引擎就是 myisan (5.5 以前)
使用 engine=myisam; 設定
缺省會建立三個檔案
frm 檔案,用來儲存表的物件結構
.myd 檔案,用來儲存資料
.myi 檔案,用來儲存索引
myiasm 特性
最大儲存能力為 256tb
支援 b-tree 索引
支援全文索引
支援索引快取
支援資料壓縮
支援複製
支援查詢快取
地理(三維)資料型別支援
地理資料索引支援
支援資料加密
支援統計資訊
鎖粒度到 table
支援備份/時間點恢復
myisan 不支援的
mvcc 不支援
clustered 索引不支援
hash 索引不支援
不支援事物
不支援資料快取
不支援外健約束
不支援行級鎖
myisam 主要優點是:查詢快,寫入快
myisam 支援三種儲存格式:靜態(fixed)、動態(dynamic)、壓縮(compressed)
靜態:
靜態指的是,表不包含(varchar/varbinary/blob/text)
靜態表會把以上字段型別會自動填充到達列的長度
較快,易於快取
易於崩潰後重建
比動態表占用更多的磁碟空間
靜態表,很容易可以到磁碟中的資料檔案定位和查詢記錄,因為每一行記錄都是固定的
動態:
包含(varchar/varbinary/blob/text)
除了字串長度小於4的列外,其他字串的長度都是動態的
比靜態的更節約空間
壓縮:
壓縮表是只允許已讀的,優點在於更節省空間,更快
mysql 5.5 之後。innodb 被認定為預設的儲存引擎
innodb 有下列關鍵特性
設計遵循 acid 模型,支援事物,擁有從服務崩潰中恢復的能力,能過最大限度的保護使用者的資料
支援行級鎖,並且引入了型別 oracle 資料庫中的一致性讀特性,以提公升多使用者併發時的讀寫效能
innodb 引擎表組織資料時按照主鍵聚族,通過主鍵查詢資料時效能極為優異
在維護資料完整性方面,innodb 支援外建約束
在伺服器發生故障的情況下,mysql 服務在啟動時,會自動進行故障恢復
innodb 擁有自己的快取池,常用的資料和索引都在快取中
對於 insert,update,delete 操作,會被一種稱為 change buffering 的機制自動優化
什麼是 acid ?
即事物的四個特性:原子性、一致性、隔離性、永續性
innodb 儲存引擎的特點
儲存能力 64tb
支援 mvcc
支援 b-tree 索引
支援 clustered 索引
外建約束
查詢快取
索引快取
資料快取
事物地理(三維)資料型別支援
資料加密
資料壓縮
統計資訊
支援行級鎖
備份/時間點恢復
複製支援
不支援的功能
不支援 hash 索引
不支援全文索引
地理資料索引支援
mysql的儲存引擎有 mysql儲存引擎有哪些?
儲存引擎是資料庫管理系統用來從資料庫建立 讀取和更新資料的軟體模組。mysql中有兩種型別的儲存引擎 事務型和非事務型。對於mysql 5.5及更高版本,預設的儲存引擎是innodb。在5.5版本之前,mysql的預設儲存引擎是myisam。那麼mysql儲存引擎有哪些?一 innodb 這是mys...
mysql儲存引擎 mysql儲存引擎簡介
精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...
mysql個儲存引擎 MySQL儲存引擎
mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...