MySQL:存储引擎相关命令、性能比较

目录

存储引擎

概念

类型

示例

数据库文件

MylSAM

.frm

.MYD

.MYI

InnoDB

.frm

.ibd

.opt

查看指定表的存储引擎类型

查看系统支持的存储引擎

修改存储引擎

通过配置文件指定存储引擎

使用alter修改

创建表的同时指定存储引擎

使用set命令临时指定存储引擎

比较MyISAM和InnoDB

写入速度比较

插入数据

tm表的存储过程

ti表的存储过程

测试

查询数据速度比较

没有索引的列

有索引的列

总结


存储引擎

概念

数据库存储引擎是数据库底层组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。

不同的存储引擎提供不同的存储机制、索引功能、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。

存储引擎是针对数据表的,在同一个数据库中,不同的表可以使用不同的存储引擎

类型

功能

MylSAM

MEMORY

InnoDB

存储限制

256TB

内存

64TB

支持事务

No

No

Yes

支持全文索引

Yes

No

No

支持树索引

Yes

Yes

Yes

支持哈希索引

No

Yes

No

支持数据缓存

No

N/A

Yes

支持外键

No

No

Yes

InnoDB:行级锁定(select * from tableName where name = 'tom' for update;)锁定该表的更新功能

MyISAM:表级锁定

示例

数据库文件

MylSAM

cd到mysql存放数据的data目录下的mysql目录

ls一下可以看到很多.frm、.MYD、MYI文件,这些文件都是MyISAM存储引擎生成的

[root@localhost data]# cd /usr/local/mysql/data/mysql
[root@localhost mysql]# ls
user.frm
user.MYD
user.MYI
  • .frm
    • 数据表结构,比如表有多少列,每个列的名字
  • .MYD
    • 存放表中数据
  • .MYI
    • 专门存放索引的信息的文件

InnoDB

先登录进数据库,然后创建一个数据库和表,再退出数据库

[root@localhost mysql]# mysql -uroot -p
mysql> create database auth;
mysql> use auth
mysql> create table users(id int(10), name char(20));
mysql> quit

退出后,在当前位置cd到上一级目录下,也就是/usr/local/mysql/data目录下

ls一下,可以看到一个和刚刚创建的数据库相同名称的目录,进入该目录

就可以看到,在auth的库中,一共有三个文件,这些文件都是由InnoDB生成的,这里每个表都对应了两个文件,分别是:.frm和.ibd文件

  • .frm
    • 存放数据表的元数据
  • .ibd
    • 和MyISAM的.MYD文件类似,存放数据表中的数据
  • .opt
    • 存放MySQL的配置信息
[root@localhost mysql]# cd ..
[root@localhost data]# ls
auth
[root@localhost data]# cd auth
[root@localhost auth]# ls
db.opt  users.frm  users.ibd

此时我们再次登录进数据库然后在auth库中创建第二个表

[root@localhost auth]# mysql -uroot -p
mysql> use auth
mysql> create table users001(id int(10), name char(20));
mysql> quit

再退出数据库,ls一下,可以看到又多了两个文件,而不是像第一次创建表时,多了三个文件

[root@localhost auth]# ls
db.opt  users001.frm  users001.ibd  users.frm  users.ibd

其实opt文件存储的是该数据库的配置信息,编码规则等信息,该库中的所有表共用该.opt文件

查看指定表的存储引擎类型

登录进MySQL,使用下方代码块内的show命令查看指定库指定表的状态信息

  • Engine: InnoDB:该表使用的存储引擎
  • Create_time:创建该表的时间
  • Collation: utf8_general_ci:校对字符集
[root@localhost auth]# mysql -uroot -p
mysql> show table status from auth where name = 'users'\G;
*************************** 1. row ***************************Name: usersEngine: InnoDB# ...Create_time: 2024-07-29 09:21:14Update_time: NULLCheck_time: NULLCollation: utf8_general_ci# 省略其他内容

查看系统支持的存储引擎

mysql> show engines;

修改存储引擎

通过配置文件指定存储引擎

[mysqld]单元内,修改存储引擎类型

[mysqld]
default-storage-engine=MYISAM
使用alter修改

进入要操作的数据库,通过alter命令修改表结构,来修改users表的存储引擎

修改完后,再使用show命令查询,可以看到存储引擎已经变成MyISAM

mysql> use auth
mysql> alter table users engine=myisam;
mysql> show table status from auth where name = 'users'\G;
*************************** 1. row ***************************Name: usersEngine: MyISAM# 省略其他内容
mysql> quit

此时再退出数据库,ls查看当前目录下的文件,可以看到由于修改了存储引擎,又多出了两个文件

假如在一个表中设有事务相关的指令,如果此时把存储引擎从InnoDB改为MyISAM,由于MyISAM不支持事务,所以可能会导致该表出现错误无法使用

[root@localhost auth]# ls
db.opt  users001.frm  users001.ibd  users.frm  users.MYD  users.MYI
创建表的同时指定存储引擎

登录MySQL,进入auth数据库,创建表时在末尾使用engine选项指定存储引擎

创建完后,再使用show命令查看该表的状态信息,可以看到存储引擎是MyISAM

[root@localhost auth]# mysql -uroot -p
mysql> use auth
mysql> create table test (id int(10), name char(20)) engine=myisam;
mysql> show table status from auth where name = 'test'\G;
*************************** 1. row ***************************Name: testEngine: MyISAM# ...
使用set命令临时指定存储引擎

使用set命令临时指定默认存储引擎为MyISAM

新创建的表将默认使用 MyISAM 存储引擎,但在新的会话中或者重新启动 MySQL 后,这个设置会被重置

mysql> set default_storage_engine=myisam;
mysql> show table status from auth where name = 't2'\G;
*************************** 1. row ***************************Name: t2Engine: MyISAM

比较MyISAM和InnoDB

写入速度比较

比较处理数据的速度

创建用于比较两个存储引擎性能的数据库,然后进入该数据库

分别创建两个表,tm表示测试myisam的表,ti表示测试innodb的表

mysql> create database test;
mysql> use test
mysql> create table tm(id int(20) primary key auto_increment,name char(30)) engine=myisam;
mysql> create table ti(id int(20) primary key auto_increment,name char(30)) engine=innodb;
插入数据

这里我们使用存储过程插入一千万行数据,来比较两个存储引擎的存储效率

因为要在存储过程中写SQL语句,需要加分号(;)结尾,但是在编写的时候加分号结尾就直接退出了整个存储过程

所以需要先修改SQL语句的结束标识,才能正常编写存储过程的命令

mysql> delimiter $
tm表的存储过程

修改完结束标识符后,直接在mysql中输入以下语句

向表tm中插入从tom1到 tom10000000 这一千万条数据

create procedure insertm()
begin
set @i=1;
while @i<=10000000
do
insert into tm (name) values (concat("tom", @i));
set @i=@i+1;
end while;
end
$
ti表的存储过程

向表ti中插入从tom1到 tom10000000 这一千万条数据

create procedure inserti()
begin
set @i=1;
while @i<=10000000
do
insert into ti (name) values (concat("jerry", @i));
set @i=@i+1;
end while;
end
$

测试

先把结束标识符改回分号(;)以便进行下一步操作

使用 call 命令调用存储过程,然后等待执行完毕

mysql> delimiter ;
mysql> call insertm;
# 等待执行完毕...
Query OK, 0 rows affected (2 min 30.66 sec)    # 用时2分30.66秒
mysql> call inserti;
# 等待执行完毕...
Query OK, 0 rows affected (22 min 9.11 sec)    # 用时22分9.11秒

由此可见,MyISAM的写入速度比InnoDB更快

查询数据速度比较

没有索引的列
mysql> select * from tm where name > "tom100" and name < "tom10000000";
+---------+------------+
| id      | name       |
+---------+------------+
|    1000 | tom1000    |
|   10000 | tom10000   |
|  100000 | tom100000  |
| 1000000 | tom1000000 |
+---------+------------+
4 rows in set (1.02 sec)mysql> select * from ti where name > "jerry100" and name < "jerry10000000";
+---------+--------------+
| id      | name         |
+---------+--------------+
|    1000 | jerry1000    |
|   10000 | jerry10000   |
|  100000 | jerry100000  |
| 1000000 | jerry1000000 |
+---------+--------------+
4 rows in set (2.12 sec)
有索引的列
mysql> select * from tm where id > 10 and id < 999999;
999988 rows in set (1.42 sec)
mysql> select * from ti where id > 10 and id < 999999;
999988 rows in set (0.40 sec)

总结

  • 写入速度:MyISAM更快
  • 读取速度(无索引):MyISAM更快
  • 读取速度(有索引):InnoDB更快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3281276.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

短剧系统源码分享,快速搭建部署上线教程

一、短剧系统是什么&#xff1f; 短剧制作平台&#xff0c;作为一站式综合解决方案&#xff0c;集剧本创作、角色设计、场景搭建、视频编辑、便捷发布及深度数据分析能力于一身。该平台精准定位于助力企业利用短剧形式强化品牌传播力并驱动商业价值增长&#xff0c;无论企业是…

命令行创建git仓库

方法1&#xff1a;初始化自己的仓库 git init创建完成之后可以用ls -a查看是否存在.git文件 如果不想要git仓库&#xff0c;可以使用rm -rf .git删除仓库 方法2&#xff1a;克隆别人的仓库 git clone [http][http]是仓库网址 总体流程 可以看到文件分为四种状态&#xff0c…

机器学习之——支持向量机(SVM)技术详解

机器学习之——支持向量机&#xff08;SVM&#xff09;技术详解 1. 支持向量机的基本原理1.1 超平面1.1.1 定义与作用1.1.2 高维空间中的超平面 1.2 间隔最大化1.2.1 间隔的定义1.2.2 最大化间隔的原则 1.3 支持向量1.3.1 支持向量的定义1.3.2 支持向量的作用 2. SVM的数学基础…

tomato-靶机渗透

tomato-靶机 一、安装靶机环境 下载双击.ova文件&#xff0c;写文件名路径导入 打开虚拟机用NAT模式 编辑–>虚拟网络编辑器查看IP段 二、信息收集 1.御剑端口扫描查找该虚拟机的IP 访问网站 扫目录 dirb http://192.168.30.130 收集到目录 /server-status /antibot_im…

hash表如何形成,hash函数如何计算,什么是hash冲突 如何解决 ,Golang map的底层原理及扩容机制

散列表 散列表&#xff08;hash表&#xff09;:根据给定的关键字来计算出关键字在表中的地址的数据结构。也就是说&#xff0c;散列表建立了关键字和 存储地址之间的一种直接映射关系。 问题&#xff1a;如何建立映射管血 散列函数:一个把查找表中的关键字映射成该关键字对应…

装饰大师——装饰模式(Java实现)

引言 大家好&#xff0c;上期我们介绍了装饰模式在Python中的实现&#xff0c;今天&#xff0c;我们将继续探讨装饰模式&#xff0c;并展示如何在Java中实现它。 装饰模式概述 装饰模式的核心思想是将功能附加到对象上&#xff0c;而不是通过继承来实现&#xff0c;这种模式…

蓄势赋能 数智化转型掌舵人百望云杨正道荣膺“先锋人物”

2024年&#xff0c;在数据与智能的双涡轮驱动下&#xff0c;我们迎来了一个以智能科技为核心的新质生产力大爆发时代。在数智化浪潮的推动下&#xff0c;全球企业正站在转型升级的十字路口。在这个充满变革的时代&#xff0c;企业转型升级的道路充满挑战&#xff0c;但也孕育着…

每日一题系列-两个数组的交集

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” class Solution { public:int hash[1010] {0};vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> ret;for(a…

WPF用户登录界面设计-使用SQLite数据库进行存储

一、SQLite数据库介绍 SQLite是一款轻量级的关系型数据库&#xff0c;它小巧高效&#xff0c;无需服务器配置&#xff0c;仅需单一文件即可存储数据。SQLite跨平台支持&#xff0c;易于集成到各种应用程序中&#xff0c;并支持SQL语言进行数据操作。它保证了数据的完整性、一致…

计算机网络03

文章目录 重传机制超时重传快速重传SACK 方法Duplicate SACK 滑动窗口流量控制操作系统缓冲区与滑动窗口的关系窗口关闭糊涂窗口综合症 拥塞控制慢启动拥塞避免算法拥塞发生快速恢复 如何理解是 TCP 面向字节流协议&#xff1f;如何理解字节流&#xff1f;如何解决粘包&#xf…

免费【2024】springboot 滁州市特产销售系统

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

vue2学习 -- 核心语法

文章目录 前置简介1. 模板语法2. 数据2.1 数据绑定2.2 el与data的两种写法2.3 MVVM模型2.4 Object.defineProperty2.5 Vue中的数据代理 3. 事件3.1 事件处理3.2 事件修饰符3.3 键盘事件 4. 计算属性5. 监视(侦听)属性5.1 书写形式5.2 深度监视5.3 简写形式5.4 计算属性和监听属…

大数据-53 Kafka 基本架构核心概念 Producer Consumer Broker Topic Partition Offset 基础概念了解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

美团2024年春招第一场笔试[测开方向],编程题+选择题详解,ACM式C++解法

编程题&选择题 编程题小美的平衡矩阵思路代码 小美的数组询问思路代码 验证工号思路代码 选择题1.在计算机网络中&#xff0c;端口号的作用是什么2.HTTPS协议通过使用哪些机制来确保通信的安全性3.Etag用于标识资源的唯一标识符&#xff0c;他可以用于4.在一个单道系统中&a…

Nacos配置到springboot快速入门(笔记)

本人学习中的简单笔记&#xff0c;本文写的极其不详细&#xff0c;慎看&#xff01;&#xff01;&#xff01; Nacos 简介 Nacos 致力于帮助开发者发现、配置和管理微服务。它提供了一组简单易用的特性集&#xff0c;帮助开发者快速实现动态服务发现、服务配置、服务元数据及…

CSCP、CPIM和CLMP三大证书的区别?如何选择?

在制造型企业、供应链和运营管理专业人士都会不断寻找方法来提升他们的技能和职业前景。三种流行的认证——CSCP&#xff08;Certified Supply Chain Professional&#xff09;、CPIM&#xff08;Certified in Planning and Inventory Management&#xff09;以及CLMP&#xff…

创客项目秀 | 基于xiao的光剑

在《星球大战》宇宙中&#xff0c;光剑不仅仅是武器;它们是持有者与原力的桥梁&#xff0c;制造一把光剑几乎是每个创客的梦想&#xff0c;今天给大家带来的是国外大学生团队制作的可伸缩光剑项目。 材料清单&#xff1a; 电机驱动模块1:90减速电机套装MP3模块、喇叭Xiao RP2…

一「骑」就LUCKY!凯迪拉氪强劲动力,带你一路顺畅,幸运随行!

好运&#xff0c;其实就是毫不费劲的完成心里所想的事情。简单来说&#xff0c;是不需要太多努力&#xff0c;就能得到比较大的回报。每个人都希望自己拥有好运气&#xff0c;但这就跟抽盲盒一样&#xff0c;可能穷极一生都享受不到。 所以&#xff0c;与其期待虚无缥缈的好运…

爬虫问题---ChromeDriver的安装和使用

一、安装 1.查看chrome的版本 在浏览器里面输入 chrome://version/ 回车查看浏览器版本 Chrome的版本要和ChromeDriver的版本对应&#xff0c;否则会出现版本问题。 2.ChromeDriver的版本选择 114之前的版本&#xff1a;https://chromedriver.storage.googleapis.com/index.ht…

生成式AI在金融领域的研究与应用

引言 科技的进步日新月异&#xff0c;伴随着移动终端与网络的不断迭代&#xff0c;人工智能领域也从专家系统到卷积神经网络&#xff0c;从Transform到生成式AI&#xff0c;乃至未来的AGI&#xff0c;不断改变我们的生活方式&#xff0c; 科技发展驱动人类社会加速迈向全面智能…