当前位置:网站首页>MySQL23-存儲引擎

MySQL23-存儲引擎

2022-07-06 10:33:00 保護我方阿遙

一. 查看存儲引擎

  • 查看mysql提供什麼存儲引擎:
show engines;

在這裏插入圖片描述

show engines \G;

在這裏插入圖片描述
在這裏插入圖片描述

二. 設置系統默認的存儲引擎

  • 查看默認的存儲引擎:
show variables like '%storage_engine%';
#或
SELECT @@default_storage_engine;

在這裏插入圖片描述在這裏插入圖片描述

  • 修改默認的存儲引擎
    如果在創建錶的語句中沒有顯式指定錶的存儲引擎的話,那就會默認使用 InnoDB 作為錶的存儲引擎。如果我們想改變錶的默認存儲引擎的話,可以這樣寫啟動服務器的命令行。
SET DEFAULT_STORAGE_ENGINE=MyISAM;

或者修改 my.cnf 文件:

default-storage-engine=MyISAM
# 重啟服務
systemctl restart mysqld.service

三. 設置錶的存儲引擎

存儲引擎是負責對錶中的數據進行提取和寫入工作的,我們可以為 不同的錶設置不同的存儲引擎 ,也就是說不同的錶可以有不同的物理存儲結構,不同的提取和寫入方式。

3.1. 創建錶時指定存儲引擎

我們之前創建錶的語句都沒有指定錶的存儲引擎,那就會使用默認的存儲引擎 InnoDB 。如果我們想顯式的指定一下錶的存儲引擎,那可以這麼寫:

CREATE TABLE 錶名(
建錶語句;
) ENGINE = 存儲引擎名稱;

3.2. 修改錶的存儲引擎

如果錶已經建好了,我們也可以使用下邊這個語句來修改錶的存儲引擎:

ALTER TABLE 錶名 ENGINE = 存儲引擎名稱;
create table engine_demo_table(
     c1 int primary key,
     c2 varchar(25));
     
show create table engine_demo_table; 
alter table engin_demo_table engine=MYISAM;
show create table engine_demo_table; 

在這裏插入圖片描述

四. 引擎介紹

4.1. InnoDB 引擎:具備外鍵支持功能的事務存儲引擎

  1. MySQL從3.23.34a開始就包含InnoDB存儲引擎。 大於等於5.5之後,默認采用InnoDB引擎 。
  2. InnoDB是MySQL的 默認事務型引擎 ,它被設計用來處理大量的短期(short-lived)事務。可以確保事務的完整提交(Commit)和回滾(Rollback)。
  3. 除了增加和查詢外,還需要更新、删除操作,那麼,應優先選擇InnoDB存儲引擎。
  4. 除非有非常特別的原因需要使用其他的存儲引擎,否則應該優先考慮InnoDB引擎。
  5. 數據文件結構:
  • 錶名.frm 存儲錶結構(MySQL8.0時,合並在錶名.ibd中)。
  • 錶名.ibd 存儲數據和索引。
  1. InnoDB是 為處理巨大數據量的最大性能設計 。
  • 在以前的版本中,字典數據以元數據文件、非事務錶等來存儲。現在這些元數據文件被删除了。比如: .frm , .par , .trn , .isl , .db.opt 等都在MySQL8.0中不存在了。
  1. 對比MyISAM的存儲引擎, InnoDB寫的處理效率差一些 ,並且會占用更多的磁盤空間以保存數據和索引。
  2. MyISAM只緩存索引,不緩存真實數據;InnoDB不僅緩存索引還要緩存真實數據, 對內存要求較高 ,而且內存大小對性能有决定性的影響。

4.2. MyISAM 引擎:主要的非事務處理存儲引擎

  1. MyISAM提供了大量的特性,包括全文索引、壓縮、空間函數(GIS)等,但MyISAM 不支持事務、行級鎖、外鍵 ,有一個毫無疑問的缺陷就是 崩潰後無法安全恢複 。
  2. 5.5之前默認的存儲引擎。
  3. 優勢是訪問的 速度快 ,對事務完整性沒有要求或者以SELECT、INSERT為主的應用。
  4. 針對數據統計有額外的常數存儲。故而 count(*) 的查詢效率很高。
  5. 數據文件結構:
  • 錶名.frm 存儲錶結構。
  • 錶名.MYD 存儲數據 (MYData)。
  • 錶名.MYI 存儲索引 (MYIndex)。
  1. 應用場景:只讀應用或者以讀為主的業務。

4.3. Archive 引擎:用於數據存檔

  • 下錶展示了ARCHIVE 存儲引擎功能
特征支持
B樹索引不支持
備份/時間點恢複 (在服務器中實現,而不是在存儲引擎中)支持
集群數據庫支持不支持
聚集索引不支持
壓縮數據支持
數據緩存不支持
加密數據(加密功能在服務器中實現)支持
外鍵支持不支持
全文檢索索引不支持
地理空間數據類型支持支持
地理空間索引支持不支持
哈希索引不支持
索引緩存不支持
鎖粒度行鎖
MVCC不支持
存儲限制沒有任何限制
交易不支持
更新數據字典的統計信息支持

4.4. Blackhole 引擎:丟弃寫操作,讀操作會返回空內容

4.5. CSV 引擎:存儲數據時,以逗號分隔各個數據項

使用案例如下

create table testcsv (
    i int not null,
    c char(10) not null) engine=CSV;
INSERT INTO testcsv VALUES(1,'record one'),(2,'record two');
select * from testcsv;

在這裏插入圖片描述

cd /var/lib/mysql
cd MYSQLTEST/

在這裏插入圖片描述

4.6. Memory 引擎:置於內存的錶

概述:
Memory采用的邏輯介質是 內存 , 響應速度很快 ,但是當mysqld守護進程崩潰的時候 數據會丟失 。另外,要求存儲的數據是數據長度不變的格式,比如,Blob和Text類型的數據不可用(長度不固定的)。
主要特征:

  1. Memory同時 支持哈希(HASH)索引 和 B+樹索引 。
  2. Memory錶至少比MyISAM錶要 快一個數量級 。
  3. MEMORY 錶的大小是受到限制 的。錶的大小主要取决於兩個參數,分別是 max_rows 和max_heap_table_size 。其中,max_rows可以在創建錶時指定;max_heap_table_size的大小默認為16MB,可以按需要進行擴大。
  4. 數據文件與索引文件分開存儲。
  5. 缺點:其數據易丟失,生命周期短。基於這個缺陷,選擇MEMORY存儲引擎時需要特別小心。
    使用Memory存儲引擎的場景:
  6. 目標數據比較小 ,而且非常 頻繁的進行訪問 ,在內存中存放數據,如果太大的數據會造成 內存溢出 。可以通過參數 max_heap_table_size 控制Memory錶的大小,限制Memory錶的最大的大小。
  7. 如果 數據是臨時的 ,而且 必須立即可用 得到,那麼就可以放在內存中。
  8. 存儲在Memory錶中的數據如果突然間 丟失的話也沒有太大的關系 。

4.7. Federated 引擎:訪問遠程錶

Federated引擎是訪問其他MySQL服務器的一個 代理 ,盡管該引擎看起來提供了一種很好的 跨服務器的靈活性 ,但也經常帶來問題,因此 默認是禁用的 。

4.8. Merge引擎:管理多個MyISAM錶構成的錶集合

4.9.NDB引擎:MySQL集群專用存儲引擎

也叫做 NDB Cluster 存儲引擎,主要用於 MySQL Cluster 分布式集群 環境,類似於 Oracle 的 RAC 集群。

4.10. 引擎對比

MySQL中同一個數據庫,不同的錶可以選擇不同的存儲引擎。如下錶對常用存儲引擎做出了對比。

原网站

版权声明
本文为[保護我方阿遙]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/07/202207060911326073.html