MySQL数据库引擎-Inodb,MyISAM

mysql数据库引擎-Inodb,MyISAM

1.什么是数据库引擎

84a633708d334122917a1237265c43c0

​ 数据库引擎简单来说就是一个"数据库发动机"。当你访问数据库时,不管是手动访问,还是程序访问,都不是直接读写数据库文件,而是 通过数据库引擎去访问数据库文件。以关系型数据库为例,你发SQL语句给数据库引擎, 数据库引擎解释SQL语句,提取出你需要的数据返回给你。因此,对访问者来说,数据库引擎就是SQL语句的解释器。
  正式来说,数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可以控制访问权限并快速处理事务,从而满足企业内大多数需要 处理大量数据的应用程序的要求,这包括 创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。

为了实现这些核心功能,通常数据库会包括以下核心组件:

存储管理

数据用什么样的方式来组织、存储,是 key-value 还是关系型,是按行存还是按列存,支不支持压缩,支不支持删除和修改,支持什么样的数据类型和存储接口,POSIX 还是对象存储。是否要支持计算存储分离,是否要支持分布式存储,是否支持事物处理,是否支持多副本,采用什么算法来加速数据的检索(索引)等等。存储管理是数据库的核心组件,解决了存储管理问题,数据库的问题就解决了一半了。

查询优化器

要提高数据查询的效率,数据库必须找到一条最优化的执行路径,比如,查询时是否需要使用索引,如果有多个索引,应该选择哪一个,如果数据分布在不同的存储单元(表、集合等)里,应该按照什么顺序来访问效率最高等等。优化器面对的问题可能是一个极其复杂的路径规划问题,它需要在很短的时间里计算出最优路径,需要大量核心优化算法,属于数据库中复杂程度最高的部分。

执行模块

优化器做好了执行计划后,接下来就会有执行的模块按照执行计划对数据进行相关的计算,包括数据的存取、常规的加减乘除、排序、平均值、哈希,也会包括一些机器学习的算法,数据的压缩/解压缩,最后将计算完成的结果返回给客户端。

内部管理和调度

数据库要正常地工作,还会需要一些内部协调管理的模块,比如内存和存储同步,存储空间整理,元数据管理,集群状态检测,容错和故障恢复等。

管理工具和接口

为了提高易用性,数据库都需要提供一套管理工具,比如备份/恢复、状态检测、运行时监控、资源隔离、权限管理、安全审计、自定义接口、各种数据访问接口等。

2.mysql的数据引擎有哪些

Mysql常用的数据库存储引擎有MyISAM、InnoDB、DBD(Berkeley DB)、Merge、Memory(Heap)、Example、Federated等。以下为4种常用数据库存储引擎的简单介绍。

可以通过

SHOW ENGINES;

来查看

image-20231016203700154

MyISAM:

默认的Mysql插件式存储引擎。如果应用是以读写操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么可选用此种存储引擎。

InnoDB:

用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据一致性,数据操作除了插入和查询以外,还包括很多的更新删除操作,则InnoDB比较合适。InnoDB存储引擎除了能有效地降低由于删除和更新操作导致的锁定,还可以确保事务的完整提交和回滚。

Memory:

将所有的数据保存在RAM中,在需要快速定位记录和其他类似数据的环境下,可提供极快的访问。Memory的缺陷首先是对表的大小有限制,太大的表无法缓存在内存中,其次要确保表数据可以恢复,数据库异常终止后表中的数据是可以恢复的。Memory表通常用于更新不太频繁的表,从而快速得到访问结果。

Merge:

用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们。Merge表的优点在于可以突破对单个MyISAM表大小的限制,并且将不同的表分布在多个磁盘上,可以有效地改善Merge表的访问效率。

Inodb和MyISAM引擎的区别

1.InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交。

2.InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;

3.InnoDB是聚集索引,使用B+Tree作为索引结构,数据是和主键索引绑在一起的,必须要有主键,通过主键索引效率很高。但是二级索引需要回表,先查询到主键,然后再通过主键查询到数据。

MyISAM只有二级索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

4.InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快

5.MyISAM表格可以被压缩后进行查询操作

要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快

5.MyISAM表格可以被压缩后进行查询操作

6.InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值