数据库的存储引擎

数据库的存储引擎

什么是存储引擎?

  • MySQL中的数据用各类不一样的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不一样的存储机制、
    索引技巧、锁定水平而且最终提供普遍的不一样的功能和能力。经过选择不一样的技术,你可以得到额外的速度或者功能,
    从而改善你的应用的总体功能。在MySQL中存储引擎(也称做表类型)。

mysql支持哪些存储引擎?

mysql5.6支持的存储引擎包括 InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、
ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其余存储引擎都是非事务安全表。

各类存储引擎的特性

并发性:某些应用程序比其余应用程序具备不少的颗粒级锁定要求(如行级锁定)。
事务支持:并不是全部的应用程序都须要事务,但对的确须要事务的应用程序来讲,有着定义良好的需求,如ACID兼容等。
引用完整性:经过DDL定义的外键,服务器须要强制保持关联数据库的引用完整性。
物理存储:它包括各类各样的事项,从表和索引的总的页大小,到存储数据所需的格式,到物理磁盘。
索引支持:不一样的应用程序倾向于采用不一样的索引策略,每种存储引擎一般有本身的编制索引方法,
但某些索引方法(如B-tree索引)对几乎全部的存储引擎来讲是共同的。
内存高速缓冲:与其余应用程序相比,不一样的应用程序对某些内存高速缓冲策略的响应更好,所以,
尽管某些内存高速缓冲对全部存储引擎来讲是共同的(如用于用户链接的高速缓冲,MySQL的高速查询高速缓冲等),
其余高速缓冲策略仅当使用特殊的存储引擎时才惟必定义。
性能帮助:包括针对并行操做的多I/O线程,线程并发性,数据库检查点,成批插入处理等。
其余目标特性:可能包括对地理空间操做的支持,对特定数据处理操做的安全限制等。

经常使用存储引擎及适用场景

InnoDB
用于事务处理应用程序,支持外键和行级锁。若是应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,
数据操做除了插入和查询以外,还包括不少更新和删除操做,那么InnoDB存储引擎是比较合适的。
InnoDB除了有效的下降由删除和更新致使的锁定,还能够确保事务的完整提交和回滚,
对于相似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。
#InnoDB 5.6以上 默认存储方式
        # 存储的文件个数:表结构、表中的数据
        # 支持行级锁、支持表锁 ,修改数据多,#行级锁效率很低
        # 支持事务    #开启事务不能再分,执行不成功回滚
        # 支持外键    #外键 主要作数据关联  因为外键的约束,删除的时候要先删除关联

MyI SAM
若是应用是以读操做和插入操做为主,只有不多的更新和删除操做,而且对事务的完整性、并发性要求不高,那么能够选择这个存储引擎。
#MyI SAM 5.5如下 默认存储方式
        # 存储的文件个数:表结构、表中的数据、索引
        # 支持表级锁
        # 不支持行级锁 不支持事务 不支持外键

Memory ['mɛməri]  
将全部的数据保存在内存中,在须要快速定位记录和其余相似数据的环境下,能够提供极快的访问。
Memory的缺陷是对表的大小有限制,虽然数据库由于异常终止的话数据能够正常恢复,可是一旦数据库关闭,存储在内存中的数据都会丢失。
# MEMORY 内存 
        # 存储的文件个数:表结构
        # 优点 :增删改查都很快
        # 劣势 :重启数据消失、容量有限  
        # 用的很少 有别的替代品
        
ARCHIVE引擎 (了解)
拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩。
支持最基本的插入和查询两种功能。在MySQL 5.5开始支持索引。
不支持事务。支持行级锁和专用的缓存区,因此能够实现高并发的插入。
适合存储大量日志、历史数据。

BLACKHOLE引擎 (了解)
接受但不存储数据,可是若是MySQL启用了二进制日志,SQL语句被写入日志(并被复制到从服务器)。
用于作日志记录或同步归档的中继存储。但这种应用方式会碰到不少问题,所以并不推荐。
支持事务,并且支持mvcc的行级锁。

CSV引擎 (了解)
每一个表会生成一个.CSV文件,将CSV类型的文件当作表进行处理。
把数据以逗号分隔的格式存储在文本文件中,这种文件是一种普通文本文件,每一个数据行占用一个文本行。
不支持索引,即便用该种类型的表没有主键列,也不容许表中的字段为null。
  • 查询当前数据库支持的存储引擎: mysql> show engines \G; #(\G格式化的意思)

  • 查看当前的默认存储引擎: show variables like '%engine%'; #(%表明其余内容)

  • 建立表而且指定引擎: create table t3 (id int,name char(4)) engine=memory; #(engine = "指定引擎")

  • 在配置文件中指定: default-storage-engine=INNODB #my.ini文件下的[mysqld]

  • 表字段

面试题

#大家上家公司用什么数据库 : mysql
# 哪一个版本是什么 :5.6.2.1
# 都用这个版本么 :不是都用这个版本 或 有部分用的不是这个版本
# 存储引擎 :innodb 
# 为何要用这个存储引擎:
    # 支持事务 支持外键 支持行级锁
#事务,考虑之后的支付功能的扩展      #行级锁,可以更好的处理并发的修改问题
相关文章
相关标签/搜索