Mysql数据库——InnoDB和MyISAM区别与联系

news/2024/6/15 15:35:24/文章来源:https://blog.csdn.net/G_D0120/article/details/137163619

目录

一、数据库文件差异

MyISAM

InnoDB

二、索引差异

1.关于自动增长

2.关于主键

3.关于Count函数

4.全文索引

5.Delete from table

6.索引保存位置

三、其他对比

1.可移植性、备份及恢复

2.事务支持

3.表锁差异


一、数据库文件差异

MyISAM

属于堆表,可被压缩,存储空间较小。

在磁盘存储上有是三个文件,每个文件名以表名开头,扩展名指出文件类型

  • .frm:用户存储表的定义
  • .MYD:用于存放数据
  • .MYI:用于存放表索引

MyISAM支持三种不同存储格式

  • 静态表(默认,但是注意数据末尾不能有空格,会被去掉)
  • 动态表
  • 压缩表

InnoDB

属于索引组织表,所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

有两种存储方式

  • 共享表空间
  • 多表空间存储

如果使用共享表空间,那么所有表的数据文件和索引文件都保存在一个表空间里,一个表空间可以有多个文件,通过InnoDB_data_file_path和InnoDB_data_home_dir参数设置共享表空间的位置和名字,一般共享表空间的名字叫ibdata1-n。

如果使用多表空间,那么每个表都有一个表空间文件用于存储每个表的数据和索引,文件名以表名开头,以.ibd为扩展名

二、索引差异

1.关于自动增长

MyISAM引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,它会根据前几列排序后递增。可以和其他字段一起建立联合索引。

InnoDB引擎的自动增长必须是索引,如果是组合索引也必须是组合索引的第一列。必须包含只有该字段的索引。

2.关于主键

MyISAM允许没有任何索引和主键的表存在;MyISAM的索引都是保存行的地址

InnoDB引擎如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见);InnoDB的数据是主索引的一部分,附加索引保存的是主索引的值。

3.关于Count函数

MyISAM保存有表的总行数,如果select count(*) from table;会直接取出该值

InnoDB没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了where条件判断后,MyISAM和InnoDB处理的方式都一样。

4.全文索引

MyISAM支持Fulltext类型的全文索引

InnoDB不支持Fulltext类型的全文索引,但是InnoDB可以使用Sphinx插件支持全文索引,并且效果更好。(Sohinx是一个开源软件,提供多种语言的API接口,可以优化Mysql的各种查询)

5.Delete from table

使用这条命令时,InnoDB不会重新建立表,而是一条一条的删除数据,在InnoDB上如果要清空保存有大量数据的表,最好不要使用该命令。(推荐使用Truncate table,不过需要用户拥有Drop此表的权限)

6.索引保存位置

MyISAM的索引以表名+.MYI文件分别保存

InnoDB的索引和数据一起保存在表空间里

三、其他对比

1.可移植性、备份及恢复

MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。

InnoDB:免费的方案可以是拷贝数据文件、备份binlog,或者使用MysqlDump,在数据量达到几十G的时候就相对痛苦了。

2.事务支持

MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持

InnoDB:提供事务支持事务,外部键等高级数据库功能。具有事务(Commit)、回滚(Rollback)和崩溃修复能力(Crash Recovery Capabilities)的事务安全(Transaction-safe(ACID Compliant))型表

3.表锁差异

MyISAM:只支持表级锁,用户在操作MyISAM表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。

InnoDB:支持事务和行级锁,是InnoDB的最大特色。行锁大幅度提高了多用户并发操作的性能。但是InnoDB的行锁,只是在Where的主键是有效的,非主键的Where都会锁全表的。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

体验OceanBase 的binlog service

OceanBase对MySQL具备很好的兼容性。目前,已经发布了开源版的binlog service工具,该工具能够将OceanBase特有的clog模式转换成binlog模式,以便下游工具如canal、flink cdc等使用。今天,我们就来简单体验一下这个binlog service的功…

day4|gin的中间件和路由分组

中间件其实是一个方法, 在.use就可以调用中间件函数 r : gin.Default()v1 : r.Group("v1")//v1 : r.Group("v1").Use()v1.GET("test", func(c *gin.Context) {fmt.Println("get into the test")c.JSON(200, gin.H{"…

FFmpeg获取视频详情

话不多说&#xff0c;直接上代码&#xff1a; pom依赖&#xff1a; <!--视频多媒体工具包 包含 FFmpeg、OpenCV--><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.3</versi…

使用ffmpeg将视频解码为帧时,图像质量很差

当使用ffmpeg库自带的ffmpeg.exe对对视频进行解帧或合并时&#xff0c;结果质量很差。导致这种原因的是在使用ffmpeg.exe指令进行解帧或合并时使用的是默认的视频码率&#xff1a;200kb/s。 如解帧指令&#xff1a; ffmpeg.exe -i 600600pixels.avi -r 2 -f image2 img/%03d.…

Java项目:86 springboot电影评论网站系统设计与实现

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本电影评论网站管理员和用户。 管理员功能有个人中心&#xff0c;用户管理&#xff0c;电影类别管理&#xff0c;电影信息管理&#xff0c;留言板管理…

自贡市第一人民医院:超融合与 SKS 承载 HIS 等核心业务应用,加速国产化与云原生转型

自贡市第一人民医院始建于 1908 年&#xff0c;现已发展成为集医疗、科研、教学、预防、公共卫生应急处置为一体的三级甲等综合公立医院。医院建有“全国综合医院中医药工作示范单位”等 8 个国家级基地&#xff0c;建成高级卒中中心、胸痛中心等 6 个国家级中心。医院日门诊量…

wife_wife【web 攻防世界】

大佬的wp:WEB&#xff1a;Wife_wife-CSDN博客 知识点&#xff1a; prototype是new class 的一个属性&#xff0c;即__proto__指向new class 的prototype属性__proto__如果作为json代码解析的话会被当成键名处理&#xff0c;但是如果是在类中的话则会被当成子类的原型 如let o…

Catcatcat【杂项 攻防世界】

知识点&#xff1a; strings 命令 打印文件中可以打印的字符&#xff0c;可以是任意文件grep flag 过滤出文件中的flag关键字rabbit加密 深入了解Rabbit加密技术&#xff1a;原理、实现与应用-CSDN博客对称加密算法需要密钥&#xff0c;也可不设置数据开头固定&#xff1a;U2F…

二百二十九、离线数仓——离线数仓Hive从Kafka、MySQL到ClickHouse的完整开发流程

一、目的 为了整理离线数仓开发的全流程&#xff0c;算是温故知新吧 离线数仓的数据源是Kafka和MySQL数据库&#xff0c;Kafka存业务数据&#xff0c;MySQL存维度数据 采集工具是Kettle和Flume&#xff0c;Flume采集Kafka数据&#xff0c;Kettle采集MySQL数据 离线数仓是Hi…

C++ 2024-4-1 作业

#include <iostream> using namespace std;class A { public:int a;A(int a):a(a){cout<<"A的有参构造"<<endl;} }; class B:virtual public A { public:int b;B(int a,int b):A(a),b(b){cout<<"B的有参构造"<<endl;} }; cl…

论文笔记 - :DIGGING INTO OUTPUT REPRESENTATION FOR MONOCULAR 3D OBJECT DETECTION

Title: 深入研究单目 3D 物体检测的输出表示 Abstract 单目 3D 对象检测旨在从单个图像中识别和定位 3D 空间中的对象。最近的研究取得了显着的进展&#xff0c;而所有这些研究都遵循基于 LiDAR 的 3D 检测中的典型输出表示。 然而&#xff0c;在本文中&#xff0c;我们认为…

VScode debug python(服务器)

方法一&#xff1a; 创建launch.json文件&#xff1a; launch.json文件地址&#xff1a; launch.json文件内容&#xff1a; {"version": "0.2.0", //指定了配置文件的版本"configurations": [{"name": "Python: Current File&…

Java设计之道:色即是空,空即是色

0.引子 我们的这个世界上&#xff0c;存在这么一种东西&#xff1a; 第一&#xff1a;它不占据任何3D之体积&#xff0c;即它没有Volume第二&#xff1a;它也不占据任何2D之面积&#xff0c;即它没有Area第三&#xff1a;它也不占据任何1D之长度&#xff0c;即它没有Length 总…

合并两个单链表

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 但行前路&#xff0c;不负韶华&#…

微信小程序自定义弹窗组件

业务背景&#xff1a;弹窗有时字体较多&#xff0c;超过7个字&#xff0c;不适用wx.showToast. 组件代码 <view class"toast-box {{isShow? show:}}" animation"{{animationData}}"><view class"toast-content" ><view class&q…

Go-Gin中优雅的实现参数校验,自定义错误消息提示

问题描述 在参数校验的时候我们一般会基于"github.com/go-playground/validator/v10"这个库给结构体加标签实现校验参数&#xff0c;当参数校验错误的时候&#xff0c;他的提示一般是英文的&#xff0c;怎么自定义参数错误提示呢&#xff1f;跟着我一步步来 注册校…

抖音无水印视频采集软件|视频批量提取工具

轻松获取抖音无水印视频&#xff0c;一键提取&#xff0c;快速下载&#xff01; 正文&#xff1a; 想要获取抖音上的精彩视频&#xff0c;但又苦于找不到无水印的版本&#xff1f;现在&#xff0c;有了我们的抖音无水印视频采集软件&#xff0c;Q:290615413您可以轻松实现关键…

vue结合Elempent-Plus/UI穿梭框更改宽度以及悬浮文本显示

由于分辨率不同会导致文本内容显示不全&#xff0c;如下所示&#xff1a; 因此需要 1、悬浮到对应行上出现悬浮信息 实现代码如下所示&#xff1a; 这里只演示Vue3版本代码&#xff0c;Vue2版本不再演示 区别就在插槽使用上Vue3使用&#xff1a;#default“”&#xff1b;Vu…

Discuz! X3.5苗木_苗木网_苗木价格_苗木求购信息_苗木批发网模板utf-8

适合做苗木行业平台苗木网站、苗木信息网,提供苗木报价、各地苗木求购信息、绿化苗木采购招标、苗木基地展示、苗木百科知识、花木交易及苗木资讯、各地苗木信息网络行情。解压上传到template目录下&#xff0c;后台安装即可&#xff0c;包含PC手机端模板 下载地址&#xff1a;…

1.Git是用来干嘛的

Git就是一个文件管理系统&#xff0c;这样说吧&#xff0c;当多个人同时在操作一个文件的同时&#xff0c;很容易造成紊乱&#xff0c;git就是保证文件不紊乱产生的 包括集中式管理系统和分布式管理系统 听懂了&#xff0c;集中式管理系统就是从中央服务器上下载最新的版本文件…