博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL的存储引擎比较
阅读量:6895 次
发布时间:2019-06-27

本文共 1249 字,大约阅读时间需要 4 分钟。

  hot3.png

Mysql存储引擎:InnoDB和MyISAM存储引擎(Mysql并不只有这两个存储引擎,只是两个引擎使用率比较高)

InnoDB存储引擎:

InnoDB是Mysql默认事务类引擎,是最重要最广泛的存储引擎。他被设计处理大量的短期事务。它的性能和自动崩溃修复特性使得在很多非事务存储的需求中也很流行。除非有特殊的原因需要使用其他存储引擎,否则优先考虑InnoDB引擎。

InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。其默认级别是REPEATABLE_READ(可重复读)。

InnoDB表是基于聚簇索引建立的。聚簇索引对主键查询有很高的性能。不过它的二级索引(非主键索引)中必须包含主键列,所以如果主键列很大的话,其他的所有索引都会很大。所以,若表上的索引较多的话,主键应尽可能的小。

 

MyISAM存储引擎:

在Mysql5.1及以前版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,全文检索、压缩、空间函数(GIS),但MyISAM不支持事务和行级锁,而且崩溃后无法安全恢复。

 

 

转换表引擎:

  • 1、 alter table

alter table mytable engine=InnoDB;

适用于所有引擎,不过原理是将数据从原表复制到一个新的表里,在复制期间可能会消耗所有系统的I/O能力,同时会在原表上加锁。所以在繁忙的表中不适合此类操作。

  • 2、 导入与导出

可以使用masqldump工具将数据导出到文件,然后修改文件中的create table语句的存储引擎选项,再修改表名。同时要注意mysqldump默认会自动在create table语句前面加上drop table语句,不注意这一点可能会造成数据丢失。

  • 3、 查询与创建

Create table innodb_table like myisam_table;

Alter table innodb_table Engine=InnoDB;

Insert into innodb_table select * from myisam_table;

新建一个与原表一样数据结构的表,然后改变表的存储引擎,然后添加数据。

 

如果数据量大的情况下,应考虑分批处理,针对每一段数据执行事务提交操作,避免大事务产生过多的undo。假设有主键字段id,重复运行一下语句(最小值x和最大值y进行相应的替换)将数据导入到新表中。

Start transaction;

Insert in innodb_table select * from myisam_table where id between X and Y;

Commit;

 

注:可以使用pt-onlne-schema-change的工具(基于Facebook的在心schema变更技术),可以比较简单、方便地执行上述过程,避免手工操作可能导致的失误和繁琐。

转载于:https://my.oschina.net/WEguo/blog/1555039

你可能感兴趣的文章
Batch Normalization&Dropout浅析
查看>>
Viewpager+fragment数据更新问题解析
查看>>
Display中getHeight()和getWidth() 官方废弃
查看>>
洛谷 P1525 关押罪犯==codevs 1069 关押罪犯[NOIP 2010]
查看>>
国密算法--Openssl 实现国密算法(加密和解密)
查看>>
经典智力题
查看>>
noip愤怒的小鸟&&vijos2008
查看>>
聚内核和微内核-转
查看>>
微软职位内部推荐-Principal DEV Manager for Bing Client
查看>>
for 循环
查看>>
Entity Framework技术系列之0:开篇
查看>>
201621123048《Java程序设计》第五周学习总结
查看>>
mac编辑器vim美化
查看>>
MD5摘要算法简析
查看>>
《30天自制操作系统》学习笔记一
查看>>
Python.tornado.2.tornado.options
查看>>
mysql关于or的索引问题
查看>>
初遇Linux
查看>>
onclick事件没有反应的五种可能情况
查看>>
vue----webpack----对vuex的理解
查看>>