InnoDB与MyISAM性能对比与选择

InnoDB与MyISAM性能对比与选择

1. 前言

最近在查阅资料时,发现网络上很多文章当中对于innodb和myisam的讲解有些许冲突,导致我出现了一些疑惑,我决定手动去测试一下。

2. 创建表并添加数据

创建两张数据结构一样的表,同时向表中添加百万数据,执行增删改查操作,观察innodb与myisam的性能对比。

CREATE TABLE `innodb` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lenth` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `myisam` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lenth` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

3. 每张表手动创建两条数据然后使用蠕虫添加百万数据:

insert into innodb (id,name,lenth) VALUES (null,'innodb1','7');
insert into innodb (id,name,lenth) VALUES (null,'innodb2','7');
insert into `myisam` (id,name,lenth) VALUES (null,'myisam1','7');
insert into `myisam` (id,name,lenth) VALUES (null,'myisam2','7');

4. 蠕虫添加百万数据:

insert into `innodb` select null,name,lenth from `innodb`;
insert into `myisam` select null,name,lenth from `myisam`;

执行完之后,此时innodb与myisam的数据结构与数据是一模一样的:

在这里插入图片描述
在这里插入图片描述

5.性能对比(CURD)

  • 添加:为了明显的效果,我们直接使用蠕虫同时向两张表中添加1048576条数据

在这里插入图片描述
在这里插入图片描述

  • 查询

innodb查询百万数据2.221s

在这里插入图片描述

myisam查询百万数据0.510s
在这里插入图片描述

  • 删除:为了更好的展示效果,我向两张表的末尾添加了(张三,2)这条数据

innodb删除一条非主建列的数据时间为1.721s(当前表)
在这里插入图片描述

myisam删除一条非主建列的数据时间为0.266s(当前表)

在这里插入图片描述

  • 修改:修改时向表末尾添加(李四,2)

innodb表修改一条数据时间为2.362s

在这里插入图片描述

myisam表修改一条数据的时间为2.917s
在这里插入图片描述

总的来说在curd操作当中,除update操作之外,myisam的处理性能明显高于innodb。

6.如何选择存储引擎?

InnoDB存储引擎:用于事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高,如果需要频繁的进行更新、删除操作,那么就可以选择InnoDB存储引擎,因为该引擎可以实现事务的提交和回滚。

MyISAM存储引擎:管理非事务表,高速的存储和检索,以及全文搜索的能力,MyISAM存储引擎插入数据快,空间和内存的使用比较低。如果表主要是用于读取数据,那么就可以选择MyISAM存储引擎。它可以实现处理的高效率。如果对应用的完整性和并发性要求低,也可以使用MyISAM存储引擎。

7.总结

虽然说MyISAM的性能明显高于InnoDB,但是它并不支持事务、外键等一系列操作,总的来说存储引擎都有各自的优势,不能说谁比谁很好,只有合适不合适。所以当我们选择存储引擎的时候我们应该选择最合适当前表的存储引擎,比如说如果执行大量的select,MyISAM是更好的选择,如果执行大量的insert、update和delete,为了数据的安全性,InnoDB才是最好的选择。
。所以当我们选择存储引擎的时候我们应该选择最合适当前表的存储引擎,比如说如果执行大量的select,MyISAM是更好的选择,如果执行大量的insert、update和delete,为了数据的安全性,InnoDB才是最好的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龍九^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值