博客搬运工 - MySQL中四种常用存储引擎的介绍

MySQL常用的四种引擎的介绍

(1):MyISAM存储引擎

    MyISAM 基于 ISAM 的存储引擎,并对其进行扩展。他是在 web 、数据存储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务。在 MySQL 5.5.5 之前的版本中,MyISAM 是默认存储引擎。MyISAM 主要特性有:

    (1). 大文件 ( 达63位文件长度 ) 在支持大文件的文件系统和操作系统上被支持。
    (2). 当把删除、更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块来自动完成。
    (3). 每个 MyISAM 表最大索引数是 64,这可以通过重新编译来改变。每个索引最大的列数是16个。
    (4). 最大的键长度是 1000B,这也可以通过编译来改变。对于键长度超过 250B 的情况 。一个超过 1024B 的键将被用上。
    (5). BLOB 和 TEXT 列可以被索引。
    (6). Null 值被允许在索引的列中。这个值占每个键的 0-1 个字节。
    (7). 所有数字健值以高字节优先被存储以允许一个更高的索引压缩。
    (8). 每表一个 auto_increment 列的内部处理。MyISAM 为 insert 和 update 操作自动更新这一列。这使得 auto_increment 列更快(至少10%)。在序列顶的值被删除之后就不能再利用。
    (9). 可以把数据文件和索引文件放在不同目录。
    (10). 每个字符列可以有不同的字符集。
    (11). 有 varchar 的表可以固定或动态记录长度。
    (12). varchar 和 char 列可以多达 64kb。

    使用 MyISAM 引擎创建数据库,将产生三个文件。文件的名字以表的名字开始,扩展名指出文件类型:frm 文件存储表定义,数据文件的扩展名为.MYD ( MYData ),索引文件的扩展名是.MYI ( MYIndex )。

    总结:不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有要求或者以select,insert为主的应用基本上可以用这个引擎来创建表 支持3种不同的存储格式,
分别是:静态表;动态表;压缩表

    静态表:

        表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)
ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把数据本身带的空格也会忽略。

    动态表:

        记录不是固定长度的,这样存储的优点是占用的空间相对较少;
缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能

    压缩表:

        因为每个记录是被单独压缩的,所以只有非常小的访问开支

(2):InnoDB存储引擎

    InnoDB 是事务型数据库首选引擎,支持事务安全表( ACID ),支持行锁定和外键。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎,InnoDB 主要特性有:

    (1). InnoDB 给 MySQL 提供了具有提交、回滚和崩溃恢复能力的事务安全 ( ACID兼容 ) 存储引擎。InnoDB 锁定在行级并且也在 select 语句中提供一个类似 Oracle 的非锁定读。这些功能增加了多用户部署和性能。在 SQL 查询中,可以自由的将 InnoDB 类型的表与其他 MySQL 的表的类型混合起来,甚至在同一个查询中也可以混合。
    (2). InnoDB 是为处理巨大数据量的最大性能设计。他的 CPU 效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
    (3). InnoDB 存储引擎完全与 MySQL 服务器整合,InnoDB 存储引擎为在主内存中缓存数据和索引而维持他自己的缓冲池。InnoDB 将他的表和索引存在一个逻辑表空间中,表空间可以包含数个文件 ( 或原始磁盘分区 )。这与 MyISAM 表不同,比如在 MyISAM 表中每个表被存在分离的文件中。InnoDB 表可以使任何尺寸,即使在文件尺寸被限制为2G的操作系统上。
    (4). InnoDB 支持外键完整性约束 ( foreign key )。
    存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB 回味每一行生成一个 6BROWID ,并以此作为主键。
    (5). InnoDB 被用在众多需要高性能的大型数据库站点上。
    InnoDB 不创建目录,使用 InnoDB 时,MySQL 将在 MySQL 数据目录下创建一个名为 ibdata1 的 10MB 大小的自动扩展数据文件,以及两个名为 ib_logfile0 和 ib_logfile1 的 5MB 大小的日志文件。

    总结:该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM引擎,写的处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引。 
InnoDB存储引擎的特点:支持自动增长列,支持外键约束

(3):MEMORY存储引擎

    Memory存储引擎使用存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frm。memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。  MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引有其不同的使用范围。

    memory 主要特征:
    (1). memory 表的每个表可以有多达 32 个索引,每个索引 16 列,以及 500B 的最大键长度。
    (2). memory 存储引擎执行 hash 和 b-tree 索引
    (3). 可以在一个 memory 表中有非唯一键。
    (4). memory 表使用一个固定的记录长度格式。
    (5). memory 不支持 BLOB 或 TEXT 列。
    (6). memory 支持 auto_increment 列和对可包含 null 值的列的索引。
    (7). memory 表在所有客户端之间共享 ( 就像其他任何飞 temporary )
    (8). memory 表内容被存在内存中,内存是 memory 表盒服务器在查询处理时的空闲中创建的内部表共享。
    (9). 当不再需要 memory 表的内容时,要释放被 memory 表使用的内存,应该执行 delete from 或 truncate table,或者删除整个表 ( 使用 drop table )。

    Hash索引优点: 
    Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。

    Hash索引缺点:
    那么不精确查找,也很明显,因为hash算法是基于等值计算的,所以对于“like”等范围查找hash索引无效,不支持;

    Memory类型的存储引擎主要用于哪些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果,。对存储引擎为memory的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中,所以一定要对下次重新启动服务后如何获得这些修改后的数据有所考虑。

(4):MERGE存储引擎

    Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。

ACID 事务

A 事务的原子性(Atomicity):

    指一个事务要么全部执行,要么不执行。也就是说一个事务不可能只执行了一半就停止了。比如你从取款机取钱,这个事务可以分成两个步骤:1)划卡,2)出钱。不可能划了卡,而钱却没出来,这两步必须同时完成,要么就不完成。

C 事务的一致性(Consistency):

    指事务的运行并不改变数据库中数据的一致性。例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。

I 独立性(Isolation):

    事务的独立性也有称作隔离性,是指两个以上的事务不会出现交错执行的状态。因为这样可能会导致数据不一致。

D 持久性(Durability):

    事务的持久性是指事务执行成功以后,该事务所对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故的回滚。

博客搬运地点

    

posted @ 2018-05-10 08:56  焦国峰的随笔日记  阅读(214)  评论(0编辑  收藏  举报
// ############################### // ##############################