MYSQL中InnoDB和MyISAM存储引擎的区别

MYSQL中InnoDB和MyISAM存储引擎的区别

MYSQL引擎种类

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力,此种技术称为存储擎,MySQL 支
持多种存储引擎其中目前应用最广泛的是InnoDB和MyISAM两种,此外还有其他存储引擎:如BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、
Archive、CSV、Blackhole、MaxDB等

InnoDB

特性:
支持事务
支持MVCC高并发
支持外键索引
支持聚簇索引
支持行级锁
缓存索引和数据
读写阻塞受事务级别影响
相对的读取性能相对MYISAM差。适合大数据,大并发

MyISAM

不支持事务
不支持MVCC高并发
不支持外键索引
不支持聚簇索引
支持行级锁
只缓存索引
读写互相阻塞,读时不能写,写时不能读。
性能好,读取速度快
适合用于频繁查询,不会出现死锁,适合小数据,小并发

关键词解释

索引

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
举个例子:每本书都有目录,目录就是整本书的“索引”,可以通过索引快速定位到章节的所在位置。
所以对于查询更新频繁的数据不建议使用索引,因为插入或者跟新数据时需要重构索引目录,加大系统资源的开销。

聚簇索引和非聚簇索引

主要区别在于索引和数据是否放在同一个文件中,InnoDB在mysql5.5以后数据和索引都放在了同一个文件tb_name(表名).ibd;而MyISAM索引和数据分别存放在两个文件下,分别是tbl_name.MYD (数据文件)tbl_name.MYI (索引文件)

MVCC

MySQL大多数事务型存储引擎实现的都不是简单的行锁。基于提升并发性能的考虑,他们一般都同时实现了多版本并发控制(MVCC)。
可以认为MVCC是行级锁的一个变种,它能在大多数情况下避免加锁操作,因此开销更低。无论怎样实现,它们大都实现了非阻塞的读操作,写操作也只锁定制定的行。
MVCC是通过保存数据在某一个时间点的快照来实现的,也就是说无论事务执行多久,每个事务看到的数据都是一致的。InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现,这两个列一个保存了行的创建时间,一个保存了行的过期时间(或删除时间),当然,并非存储的是时间,而是系统版本号。每开启一个事务,版本号都会递增,事务开始时刻的系统版本号会作为事务的版本号。

事务

对数据库操作的整个完整的流程可以叫做事务,如更新数据从1变成2:
第一步:选中1;
第二步,将1编辑为2;
第三步,确认。
只要没确认,则事务表示还没结束,不算一个完整的事务。

锁机制

为什么需要锁机制?举个栗子:
假如没有锁。我去ATM取钱,还没结束取钱操作的时候,我在通过手机查询可以查到还没取钱的余额,此时我再通过手机转账。此时余额是不是就会产生冲突。
所以就需要锁机制,在进行某些操作的时候禁止其他操作。

读锁:共享锁,只读不可写(包括当前事务) ,多个读互不阻塞
写锁:独占锁,排它锁,写锁会阻塞其它事务(不包括当前事务)的读和它锁

并发和并行

并发:举例:一百个人同时到一个银行取钱,一个银行内只有10个工作人员。

并行:将一百个人分到另外一个银行,实现每个银行只有50个人同时取钱。

把银行的个数当作CPU的核数。
把每个银行的工作人员当作CPU的线程数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值