数据库存储引擎的简单介绍(不涉及细节)

一、存储引擎的相关知识和命令

MySQL中有关于存储引擎的概念,简单说,就是指明该表的类型,不同存储引擎,在计算机的存储方式也不同。
在MySQL中可以用命令查看数据库支持的存储引擎,
命令:show engines;
在这里插入图片描述
查看默认的存储引擎:
命令:show variables like 'storage_engine'
在这里插入图片描述

查看/显示表的相关信息:SHOW TABLE STATUS LIKE ‘tb_student’ \G
在这里插入图片描述

二、三个比较重要的数据库存储引擎

InnoDB作为默认存储是从5.1版本开始的,之前是MyISAM,

1、InonoDB存储引擎:

InonoDB是MySQL数据库中一个默认事务型存储引擎,它给表提供了事务、回滚、崩溃修复能力和多版本并发控制的事务安全,也是第一个提供外键约束的。

InonoDB存储方式:

  • 创建的表的表结构存在.frm文件中。
  • 数据和索引存储在innodb_data_home_dirinnodb_data_file_path 定义的表空间中。

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

InnoDB表是基于聚簇索引建立的,它索引结构和MySQL的其他存储引擎有很大的不同,聚簇索引对主键查询有很高的性能

2、MyISAM存储引擎

MyISAM是MySQL中常见的数据库引擎,是基于ISAM引擎发展起来的。

MyISAM提供的特性: 全文索引压缩空间函数(GIS)、表锁(整张表进行加锁)等。

不支持的:事务行级锁

存储方式:把表分为3个文件,文件的名称和表名相同,拓展名包含frmMYDMYI

  • frm:存储表的结构
  • MYD:存储数据,(其实MYD是MYDate的缩写)
  • MYI:存储索引,(其实是MYIndex的缩写)

MyISAM的性能:
MyISAM的引擎设计简单,数据以紧密格式存储,在某些场景下的性能很好。

3、MEMEORY存储引擎

MEMEORY是MySQL中一类特殊的存储引擎,使用存储在内存值的内容来创建表,而且数据也是存放在内存中的,只用名称和表名相同,拓展名为frm类型来存储表结构,数据文件存储在内存中,这就造成数据已丢失的缺点。

默认的索引类型是哈希(Hash)索引 ,速度比B型树快。

三、存储引擎的比较

特性 InnoDB MyISAM MEMORY
事务安全 支持
存储限制 64TB
空间使用
内存使用
插入数据的速度
外键支持 支持

四、选择合适的引擎

其实除了前面介绍的三种存储引擎,MySQL内还支持了Archive引擎Blockhole引擎CSV引擎Federated引擎Merge引擎NDB集群引擎。(后面还有对存储引擎进行深入的了解)

同时也支持以插件的形式支持第三方引擎,第三方引擎有 Percona的XtraDB、TokuDB引擎、RethinkDB、Falcon等。

1、选用引擎

大部分情况下,InnoDB都是正确的选择,索引它作为默认的存储引擎。

有人说无脑选用InnoDB,除非你需要用到InnoDB不具备的特性,例如要用到全文索引、优先考虑的是INnoDB加上Sphinx的组合,而不是使用支持全文索引的MyISAM。

2、选用引擎的考虑因素

在选用不同的存储引擎的时候,需要考虑的因素有:

  1. 事务
    ——如果需要事务的支持,使用InnoDB(或者XtraDB)是最为稳定且经过沿着的选择。
    ——如果不需要事务的,主要是SELECT和INSERT操作,可以选择MyISAM,日志型的应用可以使用。
  2. 备份
    ——备份也会影响到存储引擎的选择,需要在线热备份的,选择InnoDB就是基本要求。
    ——如果可以定期关闭服务器来执行备份,那么备份的因素可以忽略。
  3. 崩溃恢复
    ——数据量比较大的时候,系统崩溃后如何快速恢复时一个需要考虑的问题,相对而言,MyISAM崩溃后发生损坏的概率比InnoDB要高很多,而且恢复速度点也要慢,因此即使不需要事务的支持,也要很多选用InnoDB引擎的。
  4. 特有的特性
    ——有些应用可能依赖一些存储引擎所独有的特性或者优化,比如很多应用依赖聚簇索引的优化等。

猜你喜欢

转载自blog.csdn.net/Hicodden/article/details/107437537