zoukankan      html  css  js  c++  java
  • MySQL 的数据存储引擎

    MySQL的存储引擎

    InnoDB:

      MySQL5.5之后的默认存储引擎。

      采用MVCC来支持高并发,并且实现了四个标准的隔离级别(默认可重复读)。

      支持事务,支持外键、支持行锁、非锁定读(默认读取操作不会产生锁)

      行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大,索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。

      行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住

      InnoDB存储引擎采用Next-Key Locking机制来避免幻读。

      在Next-Key Lock 算法下,不仅仅是锁住扫描到的索引,而且还锁住这些索引覆盖的范围(gap)。因此对于这个范围内的插入都是不允许的。

      表是基于聚簇索引建立的。

      聚簇索引对主键查询有很高的性能。二级索引中必须包含主键列,所以主键列最好别太大。

     

      内部做了很多优化,包括从磁盘读取数据时采用的可预测性读、能够自动在内存中创建哈希索引以加速读操作的自适应哈希索引、能够加速插入操作的插入缓冲区等。

      通过一些机制和工具支持真正的热备份。其它存储引擎不支持热备份,要获取一致性视图需要停止对所有表的写入,而在读写混合场景中,停止写入可能也意味着停止读取。

     

    MyISAM:

      MyISAM 提供了大量的特性,包括全文索引、压缩表、空间数据索引等。

      应该注意的是,MySQL 5.6.4 也添加了对 InnoDB 存储引擎的全文索引支持

      MyISAM不支持事务和行级锁,而且无法在崩溃之后安全恢复;

      它对整张表加锁,而不是某行。

      读取时对读到的所有表加共享锁,写入时对表加排他锁。

      并发插入:在表有读取查询的同时,也可以插入新数据。

      支持地理空间搜索。

      如果不在乎可扩展能力和并发能力,以及崩溃后数据丢失,却对InnoDB空间占用过多比较敏感,可以考虑用MyISAM。

      如果不需要支持事务,主要是select和insert操作,(比如日志型应用),可以考虑用MyISAM。

     

    比较:

      事务:InnoDB 是事务型的。

      备份:InnoDB 支持在线热备份。

      崩溃恢复:MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多,而且恢复的速度也更慢。

      并发:MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。

      其它特性:MyISAM 支持压缩表和空间数据索引。

      MyISAM适合查询和插入为主的应用,InnoDB适合频繁的修改和安全性较高的应用。

     

    Memory:

      Memory 是内存级别存储引擎,数据存储在内存中,所以他能够存储的数据量较小。

      因为内存的特性,存储引擎对数据的一致性支持较差。

      锁级别为表锁,不支持事务。但访问速度非常快,并发写入性能较低,并且默认使用 hash 索引。

  • 相关阅读:
    numpy 基础 —— np.linalg
    图像旋转后显示不完全
    opencv ---getRotationMatrix2D函数
    PS1--cannot be loaded because the execution of scripts is disabled on this system
    打开jnlp Faild to validate certificate, the application will not be executed.
    BATCH(BAT批处理命令语法)
    oracle vm virtualbox 如何让虚拟机可以上网
    merge 实现
    Windows batch,echo到文件不成功,只打印出ECHO is on.
    python2.7.6 , setuptools pip install, 报错:UnicodeDecodeError:'ascii' codec can't decode byte
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/8252040.html
Copyright © 2011-2022 走看看