MySQL 3 MySQL儲存引擎與資料檔案

2022-09-02 22:36:20 字數 3550 閱讀 4303

mysql體系結構與儲存引擎: 

官方文件:

資料庫儲存引擎是資料庫底層軟體元件,資料庫管理系統使用資料引擎進行建立、查詢、更新和刪除資料操作。不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎還可以獲得特定的功能。

mysql5.7預設儲存引擎innodb,使用show engines檢視資料庫可支援的儲存引擎。mysql5.7支援的儲存引擎有innodb、myisam、memory、archive、merge、csv、blackhole

innodb:mysql 5.7中的預設儲存引擎。 innodb是用於mysql的事務安全(相容acid)的儲存引擎,具有提交,回滾和崩潰恢復功能來保護使用者資料。 innodb行級鎖定(無需公升級為更粗粒度的鎖定)和oracle風格的一致非鎖定讀取可提高多使用者併發性和效能。innodb將使用者資料儲存在聚集索引中,以減少基於主鍵的常見查詢的i / o。為了保持資料完整性, innodb還支援foreign key引用完整性約束。

參見:

myisam:這些表占用的空間很小。 表級鎖定 限制了讀/寫工作負載中的效能,因此它通常用於web和資料倉儲配置中的唯讀或唯讀工作負載中。

memory:將所有資料儲存在ram中,以便在需要快速查詢非關鍵資料的環境中進行快速訪問。

csv:其表實際上是帶有逗號分隔值的文字檔案。csv表允許您以csv格式匯入或轉儲資料,以與讀取和寫入相同格式的指令碼和應用程式交換資料。由於csv表未建立索引,因此通常innodb在正常操作期間將資料保留在表中,並且僅在匯入或匯出階段使用csv表。

參見:

可以根據以下的原則來選擇 mysql 儲存引擎:

* 如果要提供提交、回滾和恢復的事務安全(acid 相容)能力,並要求實現併發控制,innodb 是乙個很好的選擇。

* 如果資料表主要用來插入和查詢記錄,則 myisam 引擎提供較高的處理效率。

* 如果只是臨時存放資料,資料量不大,並且不需要較高的資料安全性,可以選擇將資料儲存在記憶體的 memory 引擎中,mysql 中使用該引擎作為臨時表,存放查詢的中間結果。

* 如果只有 insert 和 select 操作,可以選擇archive 引擎,archive 儲存引擎支援高併發的插入操作,但是本身並不是事務安全的。archive 儲存引擎非常適合儲存歸檔資料,如記錄日誌資訊可以使用 archive 引擎。

預設儲存引擎設定:

啟動命令新增選項 --default-storage-engine=myisam,或者在配置檔案裡新增引數default-storage-engine=myisam;

mysql> set default_storage_engine=myisam;   #臨時設定,退出客戶端後重新連線就失效。

建表指定儲存引擎:

mysql> create table t1(id int) engine=myisam;

mysql> show create table t1;   #檢視建表語句

修改已建表儲存引擎:

mysql> alter table t1 engine=innodb;

mysql> show table status\g;   #檢視所有表的情況

mysql> show engine innodb status\g;  #檢視某個儲存引擎的情況

參見:

在mysql中每乙個資料庫都會在定義好(或者預設)的資料目錄下存在乙個以資料庫名字命名的資料夾,用來存放該資料庫中各種表資料檔案。不同的mysql儲存引擎有各自不同的資料檔案,存放位置也有區別。

多數儲存引擎的資料檔案都存放在和myisam資料檔案位置相同的目錄下,但是每個資料檔案的副檔名卻各不一樣。如myisam用「.myd」作為副檔名,innodb用「.ibd」,archive用「.arc」,csv用「.csv」,等等。

1、「.frm」檔案:與表相關的元資料(meta)資訊都存放在「.frm」檔案中,包括表結構的定義資訊等。不論是什麼儲存引擎,每乙個表都會有乙個以表名命名的「.frm」檔案。所有的「.frm」檔案都存放在所屬資料庫的資料夾下面。

2、「.myd」檔案:「 .myd」檔案是myisam儲存引擎專用,存放myisam表的資料。每乙個myisam表都會有乙個「.myd」檔案與之對應,同樣存放於所屬資料庫的資料夾下,和「.frm」檔案在一起。

3、「.myi」檔案 :「.myi」檔案也是專屬於myisam儲存引擎的,主要存放myisam表的索引相關資訊。對於myisam儲存來說,可以被cache的內容主要就是**於「.myi」檔案中。每乙個myisam表對應乙個「.myi」檔案,存放於位置和「.frm」以及「.myd」一樣。

4、「.ibd」檔案和ibdata檔案:這兩種檔案都是存放innodb資料的檔案,之所以有兩種檔案來存放innodb的資料(包括索引),是因為 innodb 的資料儲存方式能夠通過配置來決定是使用共享表空間存放儲存資料,還是獨享表空間存放儲存資料。

5、db.opt 檔案:該檔案記錄這個庫的預設使用的字符集和校驗規,檔案存放在所屬資料庫的目錄下。

mysql innodb儲存引擎獨立表空間儲存方式與共享表空間儲存方式

參見:獨享表空間儲存方式:獨享表空間儲存方式使用「.ibd」檔案來存放資料,且每個表乙個「.ibd」檔案,檔案存放在和myisam資料相同的位置。

共享表空間儲存方式:如果選用共享儲存表空間來存放資料,則會使用 ibdata 檔案來存放,所有表共同使用乙個(或者多個,可自行配置)ibdata檔案。ibdata檔案可以通過 innodb_data_home_dir 和 innodb_data_file_path 兩個引數共同配置組成,innodb_data_home_dir配置資料存放的總目錄,而innodb_data_file_path配置每乙個檔案的名稱。當然,也可以不配置 innodb_data_home_dir 而直接在 innodb_data_file_path 引數配置的時候使用絕對路徑來完成配置。innodb_data_file_path 中可以一次配置多個 ibdata 檔案。檔案可以是指定大小,也可以是自動擴充套件的,但是innodb限制了僅僅只有最後乙個ibdata檔案能夠配置成自動擴充套件型別。

當我們需要新增新的ibdata檔案的時候,只能新增在innodb_data_file_path配置的最後,而且必須重啟mysql才能完成ibdata的新增工作。

注:當使用innodb儲存引擎,使用獨享表空間儲存方式,需要在my.cnf裡新增配置innodb_file_per_table = 1(預設是開啟的)。即使你這樣配置了,表資料被儲存在他們自己的表空間裡,但是共享表空間仍然在儲存其它的 innodb 內部資料:資料字典(也就是 innodb 表的元資料)、變更緩衝、雙寫緩衝區、撤銷日誌。也就是ibdata1還是會變大,如果使用不合理,仍然可能出現ibdata1占用很大儲存空間的問題。

mysql> show variables like '%per_table%';  #檢視是否使用獨享表空間儲存方式。

mysql儲存引擎 mysql儲存引擎簡介

精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...

mysql個儲存引擎 MySQL儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...

mysql儲存引擎模式 mysql儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 一 儲存引擎 儲存引擎 其實就是指定 表 如何儲存資料,如何為儲存的資料 建立索引以及 如何更新,查...