MySQL的四种常用存储引擎

MySQL有很多的存储引擎,这里写一下四种比较常用的存储引擎InnoDB,MYISAM,Memory,Archive。

InnoDB是MySQL现在的默认存储引擎,也是事务性数据库的首选存储引擎,支持外键和事务,同时支持的为行级锁。主要有以下几个特点:
1.存储结构:InnoDB将表中的数据存储在表空间上,表空间中包含若干个段,段中有区,区中有很多页,每一个页有16k,页中存取很多行记录。存储的时候是按照主键排序的。
2.使用缓存区:InnoDB建立一个内存缓存区,缓存区的大小和物理机器有关,将用到的页换入缓存区中,采用的置换算法是LRU算法,访问会经过缓存,所以效率比较高。
3.插入缓冲:InnoDB对非唯一辅助索引插入操作,先进行缓冲起来,不是每次插入都进行一次插入真正的索引,而是将离散的索引合并起来,一次进行插入。
4.两次写 :InnoDB在将一个缓存区的页写入磁盘的时候,先将页通过memcpy复制到一个内存dobble write页中,然后由于这部分是顺序写所以很快,然后再将缓存区的页写入表空间中,如果发生异常,可以从磁盘中刚才写入的备份进行恢复。
5.自适应哈希索引:innodb会监控对表上个索引页的查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,但是要符合连续的访问模式相同。
6.异步IO:用户可以发出多个IO,然后InnoDB异步的执行,而不是等待一个IO完成之后在进行下一个IO。
7.刷新领接页:如果InnoDB刷新一个脏页的时候会检测所有页,发现该页所在的区,存在其他的脏页,会一起顺便刷新。

MyISAM存储引擎是MySQL关系数据库管理系统的默认存储引擎(MySQL5.5.5以前),这种MySQL的表存储结构从旧的ISAM代码扩展出许多有用的功能.主要有以下几个特点:

1。不支持事务(事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全成功,要么全失败)
2.表级锁定(更新时锁整个表):其锁定机制是表级锁定,这样虽然可以让锁定的实现成本很小但是同时大大降低了其并发的性能.
3.读写相互阻塞:不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但是读本身不会阻塞另外的读.
4.只会缓存索引:MyISAM可以通过Key_buffer_size缓存索引,以大大提高访问性能,减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据.
5.读取速度快,占用资源相对少.
6.不支持外键约束,但是支持全文索引.

MEMORY存储引擎,将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。因此这种存储引擎很少被用到,其主要优势是速度快,而且支持使用Hash索引,可见速度可以达到很快,但是缺陷也很明显就是不安全,容易丢失,存储大小受限。

Archive存储引擎也是使用很少的一种存储引擎,从archive单词的解释我们大概可以明白这个存储引擎的用途,这个存储引擎基本上用于数据归档;它的压缩比非常的高,存储空间大概是innodb的10-15分之一所以它用来存储历史数据非常的适合,由于它不支持索引同时也不能缓存索引和数据,所以它不适合作为并发访问表的存储引擎。Archivec存储引擎使用行锁来实现高并发插入操作,但是它不支持事务,其设计目标只是提供高速的插入和压缩功能。由于不支持delete 、update、索引等操作;只支持select和insert操作,所以一般是用于存储大量的历史数据和日志等等。

后两种存储引擎使用很少,主要要了解前两种存储引擎的特点,最后总结以下InnoDB和MyISAM存储引擎的区别:

  1. InnoDB支持事务,MyISAM不支持
  2. InnoDB不支持全文索引,MyISAM支持
  3. InnoDB支持数据缓存,MyISAM不支持
    4.InnoDB支持外键,MyISAM不支持
    5.InnoDB是行级锁,而MyISAM是表级锁
    6.InnoDB的insert和update性能高,而MyISAM的select性能高
    7.InnoDB的count(*)的复杂度为O(n),而MyISAM为O(1)

你可能感兴趣的:(Data,Base)