MySQL存儲引擎 INNODB和MYISAM

存儲引擎概述

什么是存儲引擎

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

MySQL5.7支持的存儲引擎

InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE等。使用show engines語句可以查看系統支持的引擎類型

功能MyISAMMEMORYInnoDBArchive
存儲限制256TBRAM64TBNone
支持事務nonoyesno
支持全文索引yesnonono
支持樹索引yesyesyesno
支持哈希索引noyesnono
支持數據緩存noN/Ayesno
支持外鍵nonoyesno

InnoDB 適用于需要提交、回滾和恢復的事務安全(ACID)能力,并要求實現并發控制,是 MySQL的默認存儲引擎??

MyISAM能夠為數據表的插入和查詢記錄提供較高的處理效率

如果只是臨時存放數據,數據量不大,并且不需要較高的數據安全性,可以選擇將數據保存在內存的 MEMORY 引擎中,MySQL 中使用該引擎作為臨時表,存放查詢的中間結果。

如果只有 INSERT 和 SELECT 操作,可以選擇Archive 引擎,Archive 存儲引擎支持高并發的插入操作,但是本身并不是事務安全的。Archive 存儲引擎非常適合存儲歸檔數據

操作存儲引擎

查看mysql支持的存儲引擎

show engines;

MyISAM 存儲引擎

MyISAM 存儲引擎不支持事務,也不支持外鍵,特點是訪問速度快,對事務完整性沒有要求,以 SELECT、INSERT 為主的應用基本都可以使用這個引擎來創建表。

每個 MyISAM 表在磁盤上存儲成 3 個文件,其中文件名和表名都相同,但是擴展名分別為:

(1)frm(存儲表定義)

(2)MYD(MYData,存儲數據)

(3)MYI(MYIndex,存儲索引)

MyISAM 表還支持 3 種不同的存儲格式:

(1)靜態(固定長度)表

(2)動態表

(3)壓縮表

InnoDB存儲引擎

是MySQL的默認存儲引擎,在下場景中使 用 InnoDB 存儲引擎是最理想的選擇:

(1)更新密集的表:InnoDB 存儲引擎特別適合處理多重并發的更新請求。

(2)事務:InnoDB 存儲引擎是支持事務的標準 MySQL 存儲引擎。

(3)自動災難恢復:與其它存儲引擎不同,InnoDB 表能夠自動從災難中恢復。

(4)外鍵約束:MySQL 支持外鍵的存儲引擎只有 InnoDB

(5)支持自動增加列 AUTO_INCREMENT 屬性。

Innodb的數據文件:

ibd:數據表的數據文件

frm:數據表的元數據

opt:存儲的是mysql的一些配置信息,如編碼、排序的信息等

修改默認的存儲引擎

創建表,并查看默認用的存儲引擎

創建表,并查看默認用的存儲引擎
mysql> create database auth;
mysql> use auth  
mysql> CREATE TABLE t1 (user_name CHAR(16), user_passwd CHAR(48));mysql> show table status from auth where name='t1'\G

通過 alter table 修改

mysql> alter table t1 engine=MyISAM;
mysql> show table status from auth where name='t1'\G

通過 create table 創建表時指定存儲引擎

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
//添加下面語句
default-storage-engine=MyISAM[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql -uroot -ppwd123
mysql> use authmysql> CREATE TABLE t2 (user_name CHAR(16), user_passwd CHAR(48));
mysql> show table status from auth where name='t2'\G

臨時修改默認存儲引擎?

SET default_storage_engine=< 存儲引擎名 >

MyISam和InnoDB實例比較

1:創建兩張表分別以MyIsam和InnoDB作為存儲引擎

create database test;
use test;
create table tm(id int(20) primary key auto_increment,name char(30)) engine=myisam;
create table ti(id int(20) primary key auto_increment,name char(30)) engine=innodb;
mysql> show create table tm\G
mysql> show create table ti\G

2.插入一千萬數據,來比較兩個存儲引擎的存儲效率

創建兩個存儲過程

mysql> create procedure insertm()
begin
set @i=1;
while @i<=10000000
do
insert into tm(name) values(concat("wy",@i));
set @i=@i+1;
end while;
end
$mysql> create procedure inserti()
begin
set @i=1;
while @i<=10000000
do
insert into ti(name) values(concat("wy",@i));
set @i=@i+1;
end while;
end
$mysql> delimiter ;

利用存儲過程向兩個表添加數據

插入(一千萬條)MyIsam存儲引擎的表中的時間如下:mysql> call insertm;Query OK, 0 rows affected (1 min 49.74 sec)插入(一千萬條)InnoDB存儲引擎的表中的時間如下:mysql> call inserti;Query OK, 0 rows affected (13 min 32.96 sec)根據結果得出:MyIsam存儲引擎在寫入方面有優勢

3.查詢數據總數目

InnoDB的SQL語句的分析:
mysql> desc select count(*) from ti\G;
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: tipartitions: NULLtype: index
possible_keys: NULLkey: PRIMARYkey_len: 4ref: NULLrows: 9732352filtered: 100.00Extra: Using index
1 row in set, 1 warning (0.00 sec)
下面是MyIsam(他的數據存儲在其他的表中所以這里是沒有影響行數的)的SQL語句的分析:
mysql> desc select count(*) from tm\G;
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: NULLpartitions: NULLtype: NULL
possible_keys: NULLkey: NULLkey_len: NULLref: NULLrows: NULLfiltered: NULLExtra: Select tables optimized away
1 row in set, 1 warning (0.00 sec)

4.查詢某一范圍的數據

沒有索引的列
mysql> select * from tm where name>"zhangsan100" and name<"zhangsan10000000";
+---------+-----------------+
| id      | name            |
+---------+-----------------+
|    1000 | zhangsan1000    |
|   10000 | zhangsan10000   |
|  100000 | zhangsan100000  |
| 1000000 | zhangsan1000000 |
+---------+-----------------+
4 rows in set (1.69 sec)mysql> select * from ti where name>"zhangsan100" and name<"zhangsan10000000";
+---------+-----------------+
| id      | name            |
+---------+-----------------+
|    1000 | zhangsan1000    |
|   10000 | zhangsan10000   |
|  100000 | zhangsan100000  |
| 1000000 | zhangsan1000000 |
+---------+-----------------+
4 rows in set (2.57 sec)mysql> select * from ti where name="zhangsan9999999";
+---------+-----------------+
| id      | name            |
+---------+-----------------+
| 9999999 | zhangsan9999999 |
+---------+-----------------+
1 row in set (2.15 sec)mysql> select * from tm where name="zhangsan9999999";
+---------+-----------------+
| id      | name            |
+---------+-----------------+
| 9999999 | zhangsan9999999 |
+---------+-----------------+
1 row in set (0.99 sec)

無索引查詢MyIsam有優勢

有索引的列
mysql> select * from tm where id>10 and id<999999;999988 rows in set (1.96 sec)mysql> select * from ti where id>10 and id<999999;999988 rows in set (0.52 sec)

有索引查詢InnoDB有優勢

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36973.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據面試之Hadoop

目錄 介紹下Hadoop Hadoop的特點 說下Hadoop生態圈組件及其作用 Hadoop主要分哪幾個部分?他們有什么作用? Hadoop 1.x&#xff0c;2x&#xff0c;3.x的區別 Hadoop集群工作時啟動哪些進程?它們有什么作用? 在集群計算的時候&#xff0c;什么是集群的主要瓶頸 搭建Ha…

用英文介紹美國總統Trump: Donald J. Trump Twice Impeached (2017 – 2021)

Donald J. Trump: Twice Impeached (2017 – 2021) Link: https://www.youtube.com/watch?vJ7RC2DKf6rs&listPLybg94GvOJ9E-ZM1U6PAjgPUmz-V4-Yja&index45 Summary Summary of Donald Trump’s Rise and Presidency Donald John Trump, originally from Queens, Ne…

網頁中如何接入高德地圖【靜態地圖篇】

接入高德地圖 登錄高德開放平臺創建應用添加key創建靜態地圖文檔說明markers 網頁應用總結 登錄高德開放平臺 高德開放平臺 創建應用 點擊我的應用 -> 創建應用 添加key 調相關接口都需要用到這個key&#xff01; 創建靜態地圖 靜態地圖API文檔 文檔說明 服務地址…

基于上一篇博客,用阻塞隊列實現異步下單

在上一篇博客中&#xff0c;我們介紹了如何利用 Redis 和 Lua 腳本來高效處理秒殺活動中的高并發請求&#xff0c;保證用戶體驗。本文將進一步優化秒殺系統&#xff0c;通過引入阻塞隊列實現異步下單&#xff0c;從而提高系統的整體性能和穩定性。 引言 秒殺活動往往伴隨著極…

ArmSoM-Sige7/5/1 和樹莓派5規格比較

引言 在當今快速發展的嵌入式系統領域&#xff0c;選擇一款性能強大、功能豐富的開發板對于項目的成功至關重要。本文將介紹并比較 Sige7、Sige5、Raspberry Pi 5 和 Sige1 這四款開發板的關鍵規格和特性&#xff0c;幫助開發者和愛好者選擇最適合其需求的平臺。 ArmSoM-Sige…

使用模板方法設計模式封裝 socket 套接字并實現Tcp服務器和客戶端 簡單工廠模式設計

文章目錄 使用模板方法設計模式封裝套接字使用封裝后的套接字實現Tcp服務器和客戶端實現Tcp服務器實現Tcp客戶端 工廠模式 使用模板方法設計模式封裝套接字 可以使用模塊方法設計模式來設計套接字 socket 的封裝 模板方法&#xff08;Template Method&#xff09;設計模式是一…

【深度學習】深度學習基礎

李宏毅深度學習筆記 局部極小值與鞍點 鞍點其實就是梯度是零且區別于局部極小值和局部極大值的點。 鞍點的叫法是因為其形狀像馬鞍。鞍點的梯度為零&#xff0c;但它不是局部極小值。我們把梯度為零的點統稱為臨界點&#xff08;critical point&#xff09;。損失沒有辦法再下…

使用Flink CDC實現 Oracle數據庫數據同步(非SQL)

文章目錄 前言一、開啟歸檔日志二、創建flinkcdc專屬用戶2.1 對于Oracle 非CDB數據庫&#xff0c;執行如下sql2.2 對于Oracle CDB數據庫&#xff0c;執行如下sql 三、指定oracle表、庫級啟用四、使用flink-connector-oracle-cdc實現數據庫同步4.1 引入pom依賴4.1 Java主代碼4.1…

Docker Desktop 簡易操作指南 (Windows, macOS, Linux)

1. 下載最新版本 Docker Desktop https://www.docker.com/products/docker-desktop/ 2.啟動 Docker Desktop 3.常用命令&#xff08;在 cmd 或 Terminal 中執行&#xff09; #列出所有鏡像&#xff08;Images&#xff09; docker images #列出所有容器&#xff08;Containers&…

OpenSSL/3.3.0: error:0A00018A:SSL routines::dh key too small

php curl解決辦法: curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, ‘DEFAULTSECLEVEL1’); python 解決辦法: from twisted.internet.ssl import AcceptableCiphers from scrapy.core.downloader import contextfactory contextfactory.DEFAULT_CIPHERS AcceptableCiphers.from…

CSS 核心知識點 - grid

思維導圖 參考網址: https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_grid_layout 一、什么是 grid&#xff1f; CSS Grid布局是在CSS3規范中引入的一種新的布局方式&#xff0c;旨在解決傳統布局方法&#xff08;如浮動、定位、表格布局&#xff09;存在的許多問題。C…

Spring Boot 集成 MyBatis-Plus 總結

Spring Boot 集成 MyBatis-Plus 總結 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在Java開發中&#xff0c;Spring Boot以其簡潔和高效的特點&#xff0c;…

Oh My Zsh Git 插件

以下是一些常見的別名和它們對應的 Git 命令&#xff1a; g: gitga: git addgaa: git add --allgapa: git add --patchgau: git add --updategb: git branchgba: git branch -agbd: git branch -dgbda: git branch --no-color --merged | command grep -vE “^(||*|\s*(main|m…

第十九站:Java鈦藍——區塊鏈技術的新探索

在區塊鏈技術的新探索中&#xff0c;Java作為一門成熟的編程語言&#xff0c;正在通過Hyperledger Fabric和Web3j等技術實現其在區塊鏈領域的應用。以下是對這些技術的簡要介紹和如何使用Java源代碼與它們進行交互的講解。 Hyperledger Fabric Hyperledger Fabric是一個由Lin…

React.js 全面解析:從基礎到實戰案例

引言&#xff1a; React.js&#xff0c;由Facebook推出并維護的開源JavaScript庫&#xff0c;以其組件化思想、虛擬DOM技術和聲明式編程風格&#xff0c;成為構建用戶界面的首選工具之一。本文將系統性地介紹React的基礎概念、核心特性&#xff0c;并通過實際案例展示基礎屬性…

DataWhale-吃瓜教程學習筆記(四)

學習視頻&#xff1a;第3章-二分類線性判別分析_嗶哩嗶哩_bilibili 西瓜書對應章節&#xff1a; 3.4 文章目錄 - 算法原理- 損失函數推導-- 異類樣本中心盡可能遠-- 同類樣本方差盡可能小-- 綜合 知識點補充 - 二范數二范數&#xff08;2-norm&#xff09;詳解定義幾何意義性質…

vue3中省市區聯動在同一個el-form-item中咋么設置rules驗證都不為空的效果

在開發中出現如下情況&#xff0c;在同一個el-form-item設置了省市區三級聯動的效果 <el-form-item label"地區" prop"extraProperties.Province"><el-row :gutter"20"><el-col :span"12"><el-select v-model&qu…

OpenHarmony開發實戰:HDF驅動開發流程

概述 HDF&#xff08;Hardware Driver Foundation&#xff09;驅動框架&#xff0c;為驅動開發者提供驅動框架能力&#xff0c;包括驅動加載、驅動服務管理、驅動消息機制和配置管理。并以組件化驅動模型作為核心設計思路&#xff0c;讓驅動開發和部署更加規范&#xff0c;旨在…

Unity3D Excel表格數據處理模塊詳解

一、引言 在Unity3D開發中&#xff0c;我們經常需要處理大量的數據&#xff0c;這些數據可能是游戲配置、角色屬性、道具信息等。Excel表格作為一種常見的數據存儲方式&#xff0c;具有結構清晰、易于編輯的特點&#xff0c;因此被廣泛應用于游戲開發中。本文將詳細介紹如何在…

四川赤橙宏海商務信息咨詢有限公司抖音開店靠譜嗎?

在數字化浪潮席卷全球的今天&#xff0c;電商行業正以前所未有的速度發展。而在這個大潮中&#xff0c;四川赤橙宏海商務信息咨詢有限公司憑借其專業的團隊和前瞻性的戰略眼光&#xff0c;專注于抖音電商服務&#xff0c;為廣大商家提供了一站式解決方案&#xff0c;成為了行業…