MySQL - 存储引擎

存储引擎

1 什么是存储引擎【理解】

对数据进行存储时,通过使用不同的存储机制、索引技术和锁定技巧等,获得不同的性能或功能,从而适用于某一情景的使用。

2 存储引擎的分类【了解】

MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE

3 不同存储引擎的概述【了解】

4 常用存储引擎的总结(MyISAM、InnoDB)【理解】

4.1 概述

MyISAM:
(1)默认表类型,基于传统的ISAM类型,ISAM是Indexed Sequential Access Method(有索引的顺序访问方法)的缩写,是存储记录和文件的标准方法。MyISAM不是事务安全的,而且不支持外键,如果执行大量的select,MyISAM比较合适。

InnoDB:
(1)InnoDB支持事务安全、外键、行锁,这是它最大的特点,如果有大量的update、insert,建议使用InnoDB,特别是针对多个并发和QPS(Queries Per Second)较高的情况。

4.2 表锁差异

MyISAM:
(1)只支持表级锁,用户在操作MyISAM表时,select、update、delete、insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。可以使用lock table命令来锁表,这样操作主要是可以模仿事务,但是消耗很大,通常实际中并不使用。

InnoDB:
(1)支持事务和行级锁,是InnoDB的最大特色。InnoDB的行锁模式有共享锁、排他锁、意向共享锁(表锁)、意向排他锁(表锁)和间隙锁,当语句没有使用索引时,InnoDB不能确定操作的行,这时候需要使用意向锁(表锁)。

4.3 数据库文件差异

MyISAM:
(1)MyISAM属于堆表,在磁盘上有三个文件,每个文件以表名开头,扩展名指出文件类型
.frm:用于存储表的定义
.MYD:用于存放数据
.MYI:用于存放表索引
(2)MyISAM表支持三种不同的存储格式,分别是静态表(默认)、动态表和压缩表。

InnoDB:
(1)属于索引组织表
(2)InnoDB表支持两种存储方式,分别是共享表空间存储和多表空间存储,两种存储方式的表结构和MyISAM相同,以表名开头,扩展名是.frm。
(3)如果使用共享表空间,那么所有表的数据文件和索引文件都保存在一个表空间里,一个表空间可以有多个文件,通过innodb_data_file_path和innodb_data_home_dir参数设置共享表空间的位置和名字,通常共享表空间的名字是ibdata1-n。
(4)如果使用多表空间,那么每个表都有一个表空间文件用于存储每个表的数据和索引,文件名以表名开头,以.ibd为扩展名。

4.4 索引差异

4.4.1 关于自动增长

MyISAM:
(1)自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,可以根据前面几列进行排序后递增

InnoDB:
(1)自动增长列必须是索引,如果是组合索引则必须是组合索引的第一列

4.4.2 关于主键

MyISAM:
(1)允许没有任何索引和主键的表存在
(2)MyISAM的索引都是保存行的地址

InnoDB:
(1)InnoDB引擎如果没有设定主键或者非空唯一索引,则会自动生成一个6字节的主键(用户不可见)
(2)InnoDB的数据是主索引的一部分,附加索引保存的是主索引的值

4.4.3 关于count()函数

MyISAM:
(1)MyISAM保存有表的总行数,如果select count(*) from table;会直接取出该值

InnoDB:
(1)InnoDB没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗很大,但是在加了where条件之后,MyISAM和InnoDB处理方式相同

4.4.4 关于全文索引

MyISAM:
(1)MyISAM支持FULLTEXT类型的全文索引

InnoDB:
(1)InnoDB不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好(sphinx 是一个开源软件,提供多种语言的API接口,可以优化MySQL的各种查询)

4.4.5 delete from table

使用这条命令时,innodb不会从新建立表,而是一条一条的删除数据,在innodb上如果要清空保存有大量数据的表,最 好不要使用这个命令。(推荐使用truncate table,不过需要用户有drop此表的权限)

4.4.6 关于索引保存位置

MyISAM:
(1)MyISAM的索引以表名+MYI文件分别保存

InnoDB:
(1)InnoDB的索引和数据一起保存在表空间里

最后

参考博客地址:https://www.cnblogs.com/y-rong/p/8110596.html
感谢博主分享

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值