MySQL系列:存储引擎简介

一、存储引擎

 1.Mariadb存储引擎

       存储引擎就是指表的类型决定了表在计算机中的存储方式,在MySQl是一个插入式的存储引擎概念。决定了MySQl数据库中的表可以使用不同的存储方式存储。

 2.mysql支持的存储引擎(Mariadb-servver5.5.44)

        MariaDB[(none)]> SHOW ENGINES;

wKiom1ckEsfSObJaAAHcJRZhs-A362.png

    说明:

         MariaDB 中类似Innodb的存储引擎实际上为XtraDB (percona社区提供)  InnoDB的增强改进,但仍然叫做InnoDB

 

 

 

二、Innodb存储引擎

 1.Innodb特性概述

    (1) 处理大量的短期()事务;具有自动崩溃恢复特性

    (2) 数据存储于"表空间(tablespace)"中;自行管理的黑盒;其内部组织为多个文件,表现为一个文件

    (3) 可直接存储于裸设备中,而无需文件系统支持

    (4)基于MVCC来支持高并发,支持所有的四个隔离级别,默认级别为REPEATABLEREAD(可重读功能); 间隙锁防止幻读;

    (5)Innodb使用聚集索引;也支持"自适应hash索引"(无法显示创建,InnoDB内部自行维护)

    (6)锁粒度:行级锁(一部分内容)

 

 2.innodb表空间存储方式

     (1) 所有InnoDB表的数据和索引放置于同一个表空间中;表空间文件存储于datadir定义的目录下

      数据文件(存储数据和索引)ibddata1, ibddata2, ...存满了自动扩张,可限制单个表的物理空间大小

    (2) 每个表单独使用一个表空间存储表的数据和索引;才能实现各种高级功能

参数:innodb_file_per_table=ON

数据文件(存储数据和索引):tbl_name.ibd,

表格式定义(每个表多少字段,每个字段的名称等信息):tbl_name.frm

注意:

    此方式存储数据当清空表数据,而不会清空表格式;因为数据和文件使用不同的文件分开存储

 

 

 

三、MyISAM存储引擎

 1.MyISAM概述

   (1)特性

      最早的存储引擎,也最成熟。早些服务于数据仓库(较少的插入操作但是较多的读操作的场景),不适用于在线事务处理的应用场景。

支持全文索引(FULLTEXTindex)

支持直接对表数据压缩

 支持空间函数(GIS)

不支持事务,且为表级锁(锁粒度粗糙)

崩溃后无法安全恢复,可以手动check恢复,但时间长

      注意

          MariadbMyISAM做了增强,为Aria存储引擎;其支持崩溃后安全恢复

   (2)适用场景

            只读(或者写较少)、表较小(可以接受长时间进行修复操作)

 

  2.数据文件存储

每个表有三个文件进行数据的存储

表格式定义文件

tbl_name.frm

数据文件

tbl_name.MYD

索引文件

tbl_name.MYI

          行格式:

                dynamic变长字段动态行, fixed固定长度的行长短, compressed  压缩后存放, compact紧致的, redundent冗余方式

 

 

 

四、MySQL支持的其它存储引擎

  1.CSV:将普通的CSV(字段通过逗号分隔)作为MySQL表使用;

  2.MRG_MYISAM:将多个MyISAM表合并成为一个虚拟表;

  3.BLACKHOLE:类似于/dev/null,不真正存储任何数据;

  4.MEMORY:所有数据都保存于内存中,内存表;支持hash索引;表级锁;一般用于对临时表采取的操作

  5.PERFORMANCE_SCHEMA:伪存储引擎;mysql关闭会消失不见

  6.ARCHIVE:只支持SELECT和INSERT操作;支持行级锁和专用缓存区;不支持事务;可用于数据仓库,做不可能发生改变,归档保存的不再做修改的历史数据

  7.FEDERATED:用于访问其它远程MySQL服务器一个代理,它通过创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取;在MariaDB的上实现是FederatedX

  8.其他

OQGraphSphinxSETokuDBCassandraCONNECTSQUENCE

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章