Mysql 存储引擎
1. 存储引擎简介
关系型数据库表是用来存储和组织信息的数据结构,可以将表理解为由行和列组成的表格。
由于表的类型不同,我们在实际开发过程中,就有可能需要各种各样的表,不同的表就意味着存储不同类型的数据,数据的处理上也会存在差异
对于Mysql来说,它提供了很多种类型的存储引擎
存储引擎说白了就是如何存储数据,如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
因为在关系型数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
2. MyISAM 存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务。
MyISAM主要特性有:
- 大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持。
- 当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成。
- 每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16。
- NULL被允许在索引的列中,这个值占每个键的0~1个字节。
- 可以把数据文件和索引文件放在不同目录(InnoDB是放在一个目录里面的)
静态MyISAM
如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。
因为数据表中的每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。
当数据受损时,恢复工作也比较容易做。
动态MyISAM
如果数据表中出现varchar
,xxxtext
或xxxxBLOB
字段时,服务器将自动选择这种表类型 。
相对于静态MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降,同时内存中也可能会出现很多碎片。
因此这种类型的表要经常 用optimize table
命令或优化工具来进行碎片整理。
压缩MyISAM
以上说的两种类型的表都可以用 Myisamchk工具压缩。
这种类型的表进一步减少了占用的存储。
但是这种表压缩之后不能再被修改。
另外,因为是压缩数据,所以这种表在读取的时候要先执行解压缩。
不管是哪种MyISAM表,目前都不支持事务,行级锁和外键约束的功能。
MyISAM表示独立于操作系统的,这说明可以轻松的将其从windows服务器转移到linux服务器;
每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件&#