[MySQL FAQ]系列 — 从MyISAM转到InnoDB需要注意什么

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: [MySQL FAQ]系列 — 从MyISAM转到InnoDB需要注意什么

这是[MySQL FAQ]系列,专门汇总日常使用MySQL遇到的一些小问题

问题

当前,绝大多数业务场景用InnoDB已经完全能搞定了,越来越多的业务从MyISAM转向InnoDB引擎,那么有哪些注意事项呢?

分析

当了解完两种引擎的不同之处,很轻松的就能知道有哪些关键点了。总的来说,从MyISAM转向InnoDB的注意事项有:

1、MyISAM的主键索引中,可以在非第一列(非第一个字段)使用自增列,而InnoDB的主键索引中包含自增列时,必须在最前面;这个特性在discuz论坛中,被设计用于“抢楼”功能,因此,若有类似的业务,则无法将该表从MyISAM转成InnoDB,需要自行变通实现(我们则是将其改到Redis中实现);

2、不带条件频繁统计全表总记录数时(SELECT COUNT(*) FROM TAB),InnoDB相对较慢,而MyISAM则飞快;不过,如果是基于索引条件的统计,则二者相差不大;

3、InnoDB在5.6以前不支持全文索引,不过这个相信无所谓,没什么人会在MySQL里直接跑全文索引,尤其是对中文的全文索引(前阵子有开发同学提需求直接被我否了),确实有需要的话,可以采用Sphinx、Lucene等其他方案实现;

4、一次性导入大量数据并且后续还要进行加工处理的,可以先导入到MyISAM引擎表中,经过一通加工处理完后,再导入InnoDB表(我曾经在业务中用此方法提高数据批量导入及处理效率);

5、InnoDB不支持LOAD TABLE FROM MASTER语法(不过应该也很少人使用吧);


从MyISAM转成InnoDB可以享受的好处则有:

1、完整事务特性支持,以及更高的数据并发存取效率,即更高的TPS;

2、数据库实例异常重启后,InnoDB表能自动修复,而且速度相对更快,而MyISAM需要被触发才能修复,且相对耗时可能多4~5倍甚至更多;

3、更高的数据读取性能,因为InnoDB把数据及索引同时缓存在内存中,而MyISAM只缓存了索引;

4、InnoDB支持外键(不过在MySQL中,应该很少人用到外键);


两个引擎间的重要区别详情见下:

MyISAM引擎的特点

1、堆组织表;

2、不支持事务;

3、数据文件和索引文件分开存储;

4、支持全文索引;

5、主键索引和二级索引完全一样都是B+树的数据结构,只有是否唯一的区别(主键和唯一索引有唯一属性,其他普通索引没有唯一属性。B+树叶子节点存储的都是指向行记录的row pointer);

6、有特殊计数器记录当前记录数;

7、不支持Crash recovery;

8、索引文件很容易损坏;

InnoDB引擎的特点

1、索引组织表;

2、支持事务;

3、数据文件和索引文件存储在同一个表空间中;

4、在5.6以前,不支持全文索引;

5、主键和二级索引数据结构一样都是B+树,但叶子节点存储的键值不一样(主键的叶子节点存储整行数据,因此也称为聚集索引;而二级索引的叶子节点存储的是主键的键值)

5、支持Crash recovery;

6、相同数据量时,InnoDB表空间文件大小约为MyISAM引擎的1.5~2倍;

关于InnoDB、MyISAM两种引擎的对比测试,可以参考Percona的这个对比:

http://www.percona.com/blog/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/

            </div>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3月前
|
前端开发
Promise.all()方法的作用是什么?
Promise.all()方法的作用是什么?
301 121
|
5月前
|
开发者 UED 容器
07.精通HarmonyOS Flex对齐:从基础到高级布局技巧(上)
在HarmonyOS Next的ArkUI框架中,Flex容器提供了强大而灵活的对齐系统,使开发者能够精确控制子元素在容器中的排列方式。掌握这些对齐技术,是构建专业级用户界面的关键。
170 0
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
336 2
|
JavaScript Java 测试技术
基于SpringBoot+Vue的在线文档管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的在线文档管理系统的设计与实现(源码+lw+部署文档+讲解等)
215 1
基于SpringBoot+Vue的在线文档管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之想要删除MC表中的部分数据记录,该怎么操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
182 6
|
监控 数据挖掘 UED
ROI
【5月更文挑战第16天】ROI
2966 4
|
移动开发 前端开发
ruoyi-nbcio-plus基于vue3的flowable的业务表单升级修改(二)
ruoyi-nbcio-plus基于vue3的flowable的业务表单升级修改(二)
260 0
|
安全 Java Android开发
MediaPlayer
MediaPlayer
180 0
|
弹性计算 Cloud Native 云栖大会
【云栖大会2023-倚天】云原生算力新时代-ECS倚天实例为云上业务创新提速 王志坤
• 云原生算力新时代-ECS倚天实例为云上业务创新提速 王志坤 https://www.bilibili.com/video/BV1Ej411J7Lo/?spm_id_from=333.337.search-card.all.click&vd_source=6c8a17d0190fbfef84579aac8886a516 阿里云云栖大会官网链接:计算专场 55分钟开始 https://yunqi.aliyun.com/2023/subforum/YQ-Club-JS-0001
|
机器学习/深度学习 弹性计算 负载均衡
购买阿里云服务器价格参考,活动价2000元左右的阿里云服务器分享
购买阿里云服务器需要多少钱,如果你计划购买一台价格在2000元左右的阿里云服务器,目前活动价格在2000元左右的阿里云服务器大概有16台,月付最低只要1814.00元可购买一台通用算力型u1实例8核32G配置的云服务器1个月,年付则可买到2核2G、2核4G和2核8G配置,如果购买其他系列的云服务器,最长可以买到计算型c8y实例1核2G配置云服务器3年,最低价格只要2147.76元。下面是2023年截至目前,活动价格在2000元左右的阿里云服务器分享。
398 0
购买阿里云服务器价格参考,活动价2000元左右的阿里云服务器分享