Mysql - 两种常见存储引擎的区别

存储引擎简介

存储引擎是对于数据库文件的一种存取机制(存取方式),如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。

查看Mysql有哪些存储引擎:

show engines;

Engine:存储引擎的名称
Support:MySql是否支持,YES代表支持,NO代表不支持
Comment:指对该引擎的备注

查看MySql的默认存储引擎:

show global variables like '%storage_engine';

两种常见存储引擎的相同:

1、InnoDB和MyISAM均使用B+Tree查看原因作为索引结构

2、WHERE条件都符合索引最左匹配原则

两种常见存储引擎的区别:

1、事务

InnoDb:支持事务,四种隔离级别

MYISAM:不支持事务,但每次查询都是原子的

2、查询性能

InnoDb: 较慢

MYISAM:较快(因为索引和数据分开存储,采用非聚集索引)

3、存储结构

InnoDb: 索引的数据域存储数据文件本身(主键索引采用聚集索引,非主键索引是非聚集索引)【表有两个文件:表结构文件、数据文件,没有索引文件

MYISAM:数据和索引分开储存(均采用非聚集索引) 【表有三个文件:索引文件、表结构文件、数据文件】

4、移植性、备份、恢复

InnoDb:拷贝数据文件、mysqldump、binlog备份,在数据量达到几十G时就相对痛苦

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

5、锁

InnoDb: 有表级锁、行级默认)锁

【InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。也就是说,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。】

MYISAM:只支持表级锁(即每次操作是对整个表加锁,因此并发访问受限)

6、是否支持主外键

InnoDb: 支持

MYISAM:不支持

7、是否支持全文索引

InnoDb: Mysql5.6版本之后支持

MYISAM:支持

8、是否存储表的总行数

InnoDb: 不存储(执行select count(*) from table时,需要全表扫描)

MYISAM:存储(用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快,注意不能加有任何WHERE条件)

9、使用场景

InnoDb:电商类(支持事务,安全性较高)

原因:读写频繁,请使用InnoDB。不知道如何选择时,就可以选择InnoDB,用以应对未来可能存在的复杂业务。

MYISAM:新闻类(比较适合一些查询业务)

原因:表中绝大多数都只是读查询(一般R/W > 100:1且update相对较少),可以考虑 MyISAM。

其他存储引擎: 

posted @   李若盛开  阅读(264)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示