MySQL存储引擎——InnoDB&MyISAM

这里写目录标题


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

mysql->show engines;

存储引擎
可以看到MySQL当前默认的存储引擎是InnoDB。

InnoDB

  • InnoDB是MySQL默认的事务型存储引擎。
  • 默认隔离级别是可重复读(REPEATABLE-READ),可以防止脏读不可重复读以及幻读。它是通过多版本并发控制(MVCC)+ 间隙锁(Next-Key Locking)防止幻读的。
  • 主索引是聚簇索引,在索引中保存了数据,从而避免直接读取磁盘,因此对查询性能有很大提升。
  • 内部做了很多优化,包括:从磁盘读取数据时采用的可预测性读、能够加快读操作并且自动创建的自适应哈希索引、能够加速插入操作的插入缓冲等。
  • 支持真正的在线热备份。

MyISAM

  • 设计简单,数据以紧密格式存储。对于只读数据,或者表比较小、可以容忍修复操作,则依然可以使用他。
  • 提供了大量的特性,如:压缩表、空间数据索引等。
  • 不支持事务。
  • 不支持行级锁,只能对整张表加锁。读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁。但在表有读取操作的同时,也可以往表中插入新的记录,这被称为并发插入。
  • 可以手动或自动检查和修复操作,但是可能会导致一些数据丢失,而且修复操作是非常慢的。

二者比较

在5.5版本以前,MyISAM是MySQL的默认数据引擎,不支持事务和行级锁,而且最大的缺陷是崩溃后无法安全恢复;5.5版本以后,MySQL引入了InnoDB(事务型存储引擎)。

二者的对比:

InnoDBMyISAM
事务事务型,可以使用commit和rollback语句
并发支持表级锁和行级锁(默认)仅支持表级锁
外键支持不支持
备份支持在线热备份不支持
崩溃恢复能力更强较弱
是否支持MVCC支持不支持

InnoDB与MyISAM使用的索引:

MySQL索引使用的主要是哈希索引和B Tree索引。哈希索引的底层数据结构是哈希表,当查询单条记录时可选择哈希索引,查询性能最快;其余大部分场景,建议选择B Tree索引。

  • MyISAM
    B+Tree叶节点的data域存放的是数据记录的地址。在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的key存在,则取出其data域的值作为地址,然后以此地址读取相应的数据记录。这被称为“非聚簇索引”
  • InnoDB
    相比MyISAM(数据文件和索引问件是分离的),InnoDB的数据文件本身就是索引文件,树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。这被称为“聚簇索引”。而其余的索引都作为辅助索引,辅助索引的data域存储相应记录主键的值而不是地址,这也是和MyISAM不同的地方。在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,再走一遍主索引。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值