快去|

爱慕6

园龄:3年5个月粉丝:1关注:0

MySQL存储引擎

一:什么是MySQL的存储引擎

数据库最核心的一点就是用来存储数据,数据存储就避免不了和磁盘打交道。那么数据以哪种方式进行存储,如何存储是存储的关键所在。所以存储引擎就相当于是数据存储的发动机,来驱动数据在磁盘层面进行存储。
MySQL架构的三层模型:
image
MySQL的存储引擎是插件式的,用户可以根据实际的应用场景,选择最佳的存储引擎。MySQL5.5版本之前的存储引擎默认为MyISAM,在5.5版本之后默认InnoDB为存储引擎。

查看MySQL提供的所有存储引擎

show engines;
show engines \g

image
查看当前MySQL默认的存储引擎

mysql> show variables like '%storage_engine%';

查看表的存储引擎
默认情况下,如果创建表不指定存储引擎,会使用默认的存储引擎。

show table status like "User" ;

创建表的时候设置表的存储引擎

create table User(
id int(10),
name varchar(255)
) engine = InnoDB;

我们还可以通过查看建表语句来查看使用的是什么存储引擎

show create table 表名;
show create table user;

简单来说,存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式,存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。


二:不同存储引擎的特性

常见的四种存储引擎有:InnoDB、MyISAM、MEMORY、MERGE,由于在5.5之前使用的是MyISAM存储引擎,所以内容重点介绍InnoDBMyISAM两种存储引擎的介绍和对比。

InnoDB引擎

概述:InnoDB是一种兼顾高可靠和高性能的通用存储引擎,在MySQL5.5之后默认InnoDB为MySQL的存储引擎。
特点:

  • 支持事务操作:具有事务 ACID 隔离特性,默认的隔离级别是可重复读(repetable-read)、通过MVCC(并发版本控制)来实现的。能够解决脏读和不可重复读的问题。
  • 支持外键操作:支持外键 FOREIGN KEY约束,保证数据的完整性和正确性。
  • 默认的锁粒度行级锁:并发性能比较好,但是会发生死锁的情况。
  • 有安全日志文件:日志文件用于恢复因数据库崩溃或其他情况导致的数据丢失问题,保证数据的一致性。

文件:xxx.ibd,xxx代表的是表名,InnoDB引擎的每一张表都会对应一个表空间文件,存储该表的表结构(frm,sdi)、数据和索引。

MyISAM引擎

概述:MyISAM是MySQL早期的默认存储引擎。
特点:

  • 提供全文索引、压缩、空间函数,但是不支持事务,没有crash-safe的能力。
  • 支持表锁:对整张表加锁、不支持行锁。
  • 延迟更新索引:创建 MyISAM 表时,可以指定 DELAY_KEY_WRITE 选项,在每次更新完成时,不会马上将更新的索引数据写入磁盘,而是先写到内存中的键缓冲区,当清理键缓冲区或关闭表的时候,才将对应的索引块写入磁盘。这种方式可以极大地提升写入性能。
  • 压缩:压缩表极大的减少了磁盘空间的使用,减少磁盘IO,提升查询性能。

文件:xxx.sdi,存储表结构信息;xxx.MYD,存储数据;xxx.MYI,存储索引。

两者的对比:
1.数据存储机制:
 InnoDB在操作系统中存储的的文件.frm:表定义文件,.ibd:数据文件。MyISAM操作系统中存储的的文件:.frm:表定义文件,.myd:数据文件,.myi:索引文件。
2.索引建立方式:
 InnoDB使用聚集索引,索引文件和数据文件绑定。MyISAM使用非聚集索引,索引文件和数据文件分开存储,索引中保存的是数据文件的指针。
3.锁方式:
 InnoDB支持表级锁、行级锁,行级锁粒度小,处理并发能力强。MyISAM支持表级锁,用户执行增删改查的时候会自动给表加锁,效率低。
4.是否支持事务:
 在MySQL所有的存储引擎当中,只有InnoDB支持事务(Transaction)、分布式事务(XA),其他引擎均不支持,因为InnoDB强调的是保持数据一致性的高级功能,而MyISAM强调的是性能,查询速度比InnoDB快。
5.外键:
 InnoDB支持外键,而MyISAM不支持外键。
6.主键:
 InnoDB表必须有唯一索引,MyISAM则没有要求。

运用场景:
除非需要用到某些 InnoDB 不具备的特性,并且没有其他办法可以替代,否则都应该优先选择 InnoDB 引擎。
1.InnoDB:如果对事物的完整性要求比较高,在并发条件下要求数据一致性的情况下推荐使用InnoDB存储引擎。
2.MyISAM:如果应用是以读操作和插入操作为主,并且对事物的完整性、并发性要求不高,适合使用MyISAM存储引擎。
3.业务:对于电商来说,大部分需要支持事务回滚的,例如下单流程失败,那么则就需要使用InnoDB存储引擎。

拓展
Memory存储引擎
概述:Memory引擎的表数据是存储在内存中的,由于受到硬件影响、或断电问题的影响,只能将这些表作为临时表或缓存使用。
特点:

  • 内存存放
  • 默认为hash索引

文件:xxx.sdi,存储表结构信息。

本文作者:爱慕

本文链接:https://www.cnblogs.com/aimu69/p/15999058.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   爱慕6  阅读(329)  评论(0编辑  收藏  举报
 
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起