【MySQL】MyISAM与Innodb

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【MySQL】MyISAM与Innodb

 数据存放在数据库中有一定的存储方式,这种是引擎。不同引擎存取,功能,占用空间大小,读取性能有区别;


      好比我们保存图片,可以保存层不同的格式如JPEG,PNG,BMP等,但给我们或者用户看到实际图片的内容是一样的,直观区别是,占用系统的空间大小与清晰程度可能不同。我们保存到数据库里的数据于上述所说保存的图片特征类似,也有很多存储方式。但是,对于用户和应用程序来说,同样一张表的数据,无论用什么引擎来存储,用户看到的数据是一样的。布偶听的引擎存取,引擎功能,占用的空间大小,读取性能等可能有区别。


      我们可以通过使用命令:Show index from tblName。或者通过使用可视化工具查看,比如,使用Navicat打开表,查看表设计。



20180826204619986.png



MySQL常用的存储引擎有:myisam,innodb。在5.5版本前,默认是myisam,5.5版本后,默认是innodb;


     那么,这两种存储引擎最大的区别是:


    1、MyISAM不支持事务处理,读写操作会发生冲突,当查询和写入操作时间比较长时,会阻塞其他操作,容易导致连接堆积,有丢失数据的风险;而Innodb支持事务。在很大程度上决定了MyISAM不适合写频繁的业务;


     2、MyISAM支持表锁,不支持行锁和外键,因为当执行insert和update操作时,需要锁定整个表,效率低;而Innodb支持行锁(前提是表有索引,否则也是表锁),粒度小,执行写操作时效率高,但更消耗内存;


      3、Myisam有内置的计数器,存储表的行数,所以执行select count(*)from table 时,只需直接读取已经保存好的值,不需全表扫描。但innodb没有,执行此操作时,需要扫描整表;


     4、Myisam是非聚集索引,索引中保存数据的地址; B+树型索引,更有利于查找


      innodb是聚集索引,索引中保存实际的数据。B-树型索引


     5、innodb要求表必须有主键,如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识记录的列做主键,如果没有这种列,MySQL自动为innodb表生成一个隐含字段作为主键,这个字段为6个自荐,类型为长整型。


       Myisam 不要求有主键;


     6、myisam不支持外键;innodb支持外键


参考文章:


https://www.cnblogs.com/0201zcr/p/5296843.html


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
|
2天前
|
存储 SQL 关系型数据库
mysql中MyISAM和InnoDB的区别是什么
mysql中MyISAM和InnoDB的区别是什么
16 0
|
2天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
204 4
|
2天前
|
存储 监控 关系型数据库
【MySQL】InnoDB 什么情况下会产生死锁
【MySQL】InnoDB 什么情况下会产生死锁
|
2天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
22 0
|
2天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
24 0
|
2天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
10 0
|
2天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
11 0
|
2天前
|
SQL 关系型数据库 Serverless
阿里云关系型数据库RDS
阿里云关系型数据库RDS
16 2
|
2天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
24 3
mysql 设置环境变量与未设置环境变量连接数据库的区别

推荐镜像

更多