MySQL存储引擎(InnoDB和MyISAM)

    1.InnoDB存储引擎

    该引擎最大的优势就是支持事务,其主要设计目标是面向在线事务处理(OLTP)的应用。其特点是行锁设计,支持外键,并支持类似Oracle的非锁定读,即默认读取操作不会产生锁(隔离级别为RR-可重复读)。从5.5.8版本开始,MySQL的默认存储引擎就是InnoDB。

    InnoDB通过多版本并发控制(MVCC)来获得高并发性,并且实现了SQL的四种隔离标准。用一种叫做next-keylocking的策略来避免幻读(行锁与间隙锁组合起来用就叫做Next-Key Lock。锁定一个范围,并且锁定记录本身,在事务没有提交期间这个范围内的数据无法被修改或者添加。对于行的查询,都是采用该方法,主要目的是解决幻读的问题。)。除此之外还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hashindex)、预读(read ahead)等高性能搞可用的功能。

    在InnoDB存储引擎中,数据是按照主键的顺序进行存放的。如果没有显式的在表定义的时候指定主键(一般是不会发生这种情况的),InnoDB会为每一行生成一个6字节的ROWID(隐示字段)作为主键。
   
    innodb 从1.2.x 开始才增加了全文索引支持。而MySQL5.6版本中innodb的版本才升级到 1.2.x。所以,mysql5.6之前的版本的innodb不支持全文索引。

    2.MyISAM存储引擎

    首先MyISAM引擎是不支持事务和表锁设计的,所以在高并发的情况下,该引擎的性能可能差强人意。不过MyISAM引擎支持全文索引,这使得该引擎的主要面向一些OLAP(联机分析处理,其数据量大,一次操作的数据量也很大,并且数据不可更新,只会进行周期性的刷新)数据库应用。

    在MySQL5.5.8版本之前是MySQL默认的存储引擎。

    MyISAM存储引擎表是由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。可以通过myisampack工具来进一步压缩数据文件。myisampack工具是使用赫夫曼(Huffman)编码静态算法来压缩数据,压缩后的表是只读的,也可以使用该工具进行解压。

    在MySQL5.0版本之前,MyISAM默认支持的表大小为4GB,如果需要支持大于4GB的MyISAM表时,则需要定制数据引擎中MAX_ROWS和AVG_ROW_LENGTHSHUXING 这两个属性。从MySQL5.0版本开始,MyISAM默认支持256TB的单表数据。


InnoDB MyISAM
事务√ 事务×
数据行锁定√ 数据行锁定×
外键约束√ 外键约束×
全文索引√ 全文索引√
表空间较大,是MyISAM的两倍左右 表空间较小

   

    总结:

    MyISAM存储引擎节约空间,速度较快,适合处理分析不更新并且数据量大的历史数据。

    InnoDB安全性高,支持事务和多表多用户的操作,适用于用户量大并且并发量高的业务场景



    InnoDB和MyISAM在物理文件上的区别:

    InnoDB在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件。

    MyISAM有 *.frm文件(表结构文件),*.MYD'件(数据文件),*.MYI文件(索引文件)。

   

    查看数据库支持的存储引擎语句如下
    SHOW ENGINES;
在这里插入图片描述
也可以通过information_schema架构下的ENGINES表来查看。

猜你喜欢

转载自blog.csdn.net/imagineluopan/article/details/120920435