MySQL 存储引擎

查看方式:show engines

四种常见的存储引擎:

InnoDB引擎

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是默认的MySQL引擎。

1、更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。

2、支持事务。

3、支持行级锁

4、崩溃恢复能力强。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。

5、InnoDB支持外键完整性约束。

6、InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)。这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中。

7、InnoDB被用在众多需要高性能的大型数据库站点上。InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件

 

MyISAM

MyISAM拥有较高的插入(它是顺序插入的,而 InnoDB 插入还要考虑排序)、查询速度,但不支持事物。对事务完整性没有要求或者以SELECT、INSERT为主的应用可以使用该引擎。

1、每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16

2、支持全文索引,不支持行级锁。BLOB和TEXT列可以被索引

3、所有数字键值以高字节优先被存储以允许一个更高的索引压缩

4、每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操作的时候该列被更新,同时AUTO_INCREMENT列将被刷新。所以说,MyISAM类型表的AUTO_INCREMENT列更新比InnoDB类型的AUTO_INCREMENT更快

5、使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:.frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex)。在做迁移的时候就很方便。数据和索引是分离的

6、MyISAM的表还支持3种不同的存储格式:

  • 静态(固定长度)表:这是默认的格式。静态表中的字段都是非变长字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。
  • 动态表:包含变长字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁到更新删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk -r命令来改善性能,并且出现故障的时候恢复相对比较困难。
  • 压缩表:压缩表由myisamchk工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。 

 

MEMORY

MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。

1、MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度

2、MEMORY存储引擎执行HASH和BTREE索引

3、可以在一个MEMORY表中有非唯一键值

4、MEMORY表使用一个固定的记录长度格式

5、MEMORY不支持BLOB或TEXT列

6、MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引

7、MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)

8、MEMORY表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享

B+ vs Hash

  • B+树索引:范围查询(between 、> 、 <)和通配能力。等值匹配较哈希索引慢。
  • 散列索引:进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在 = 和 <> 的操作符中,不适合在 < 或 > 操作符中,也同样不适合用在order by子句中。

 

ARCHIVE

Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。

在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就开始支持索引了。

Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

posted on 2018-10-23 21:47  DoittioD  阅读(164)  评论(0编辑  收藏  举报