MYSQL 存储引擎概述

一、存储引擎

Mysql中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中每一种技术都使用了不同的存储机制,索引技巧、锁定水平并且最终提供广泛的不同功能和能力。通过选择不同的技术,你能够获得额外的速度或功能,从而改善你的应用的整体功能。

二、分类

1.MYISAM存储引擎:

不支持事务,也不支持外键,优势是访问速度快,对事务完整性没有要求或者以SELECT,INSERT为主的应用基本可以用这个引擎创建表。

(1)数据存储形式

MyISAM采用的是索引与数据分离的形式,将数据保存在三个文件中.frm.MYD,.MYIs。

.frm存储表结构

.MYD存储表的数据

.MYI存储表索引

(2)锁的粒度

MYISAM只支持表锁不支持行锁,所以读取时对表加上共享锁,在写入是对表加上排他锁。由于是对整张表加锁,相比INNODB,在并发写入时效率很低。

(3)数据的存储的特点

MYISAM是基于非聚簇索引进行存储的。

(4)表的存储格式

表的存储格式分成三种表 静态表,动态表,压缩表。

静态表:表中的字段都是非变长字段。这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照死的宽大度定义补足空格)ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把数据本身带的空格也会忽略。

动态表:

记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能。

压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支

(5)其他

MyISAM提供了大量的特性,包括全文索引,压缩,空间函数,延迟更新索引键等。

进行压缩后的表是不能进行修改的,但是压缩表可以极大减少磁盘占用空间,因此也可以减少磁盘IO,从而提供查询性能。

全文索引,是一种基于分词创建的索引,可以支持复杂的查询。

延迟更新索引键,不会将更新的索引数据立即写入到磁盘,而是会写到内存中的缓冲区中,只有在清除缓冲区时候才会将对应的索引写入磁盘,这种方式大大提升了写入性能。

2.INNODB存储引擎

INNODB存储是MYSQL默认事务引擎,也是目前重要、使用最广泛的存储引擎。

概述:

支持事务,行锁设计,支持MVCC(多版本并发控制)来支持高并发,支持外键,提供一致性非锁定读设计。

优点:

DML操作遵循ACID模型(原子性、一致性、隔离性和持久性),支持事务,支持CRASH-RECOVERY特性(当MYSQL发生故障重启后,对于INNODB表,没有完成的事务将通过REDO日志重新进行,已经提交但是没有写到数据文件中的数据,将从doublewrite buffer中重新构建)以保护数据。

2、InnoDB buffer pool 缓存被访问的表和索引信息,经常使用的数据直接从内存中读取。

3、inserts,update,deletes操作被一种称为change buffering的机制所优化。InnoDB不仅允许多并发读写同一张表,它还会缓存发生改变的数据,优化磁盘I/O。

4、当数据库运行大表的长时间查询且反复访问相同表的相同行时,一种叫做Adaptive Hash Index的特性使这些查询更快,就像数据从哈希表中查询出来一样。

5、可以压缩表和相关的索引。

6、可以对性能和可用性造成很小影响地创建和删除索引。

7、可以很快TRUNCATE掉一个file_per_table表空间,释放出磁盘空间供操作系统使用,而不必释放出仅能供InnoDB所重用的系统表空间。

8、支持行级锁和一致性读,提高多用户的并发性和性能。

9、支持主键,提高查询性能。

10、为了保持数据的完整性,InnoDB也支持外键。

11、你可以将InnoDB表与MySQL其他存储引擎的表自由组合在一起使用。例如,在一个SQL中,你可以关联一张InnoDB表和一个内存表。

12、在处理大量数据的时候,InnoDB引擎可以有效的发挥CPU效率和提升性能。.

INNODB体系结构

  • 后台线程(多线程模型)

    • Master Thread
      负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓存、UNDO页的回收。
    • IO Thread
      使用AIO处理写请求,IO Thread负责IO请求的回调处理
    • Purge Thread
      事务提交后,回收已经使用并且分配的undo页。
  • 内存
    • 缓冲池
      InnoDB是基于磁盘存储的,并将其中的记录按照页的方式进行管理,使用缓冲池技术来提高数据库的整体性能。(读取页的时候,将页放到缓冲池中(FIX操作),下次读缓冲池中的即可;修改页时,先修改缓冲池中的页,再以一定的频率刷新到磁盘(CheckPoint机制))

      • 缓冲池管理
        数据库中的缓冲池通过LRU算法进行管理(LRU List),使用最频繁的页在LRU List的前端,当缓冲池中不能存放新读取到的页时,首先释放LRU列表尾端的页。
    • 重做日志缓冲
      InnoDB将重做日志信息放入该缓冲区,然后按照一定的频率将其刷新到重做日志文件。
    • CheckPoint机制
      • 缩短数据库恢复时间:
        数据库宕机时,数据库不需要重做所有的日志因为CheckPoint之前的页都已经刷新回磁盘。
      • 缓冲池不够用时,将脏页刷新到磁盘(Fuzzy CheckPoint 部分刷新)
        当缓冲池不够用时,根据LRU算法,释放list尾端的页,若该页为脏页,则强制执行CheckPoint,刷新回磁盘。
      • 重做日志不可用时,刷新脏页
        因为重做日志不是无限增大的,当到达一定数量时,由第一条所述,数据库恢复不需要这部分重做日志,这部分就可以被覆盖重用,若此时重做日志还有用,那么强制产生CheckPoint,将缓冲池中的页至少刷新到当前重做日志的位置。
        总结一下:缓冲池不够用时,将最少使用的脏页刷新回磁盘,释放该页;当重做日志不够用时,将缓冲池刷新到当前重做日志的位置,放弃一部分重做日志,用于新的重做日志;数据库关闭时,发生Sharp CheckPoint,全部刷新
  • InnoDB 关键特性
    • 插入缓冲
    • 两次写
    • 自适应哈希索引
    • 异步IO
    • 刷新邻接页

三、其他存储引擎

MYSQL还有其他存储引擎,包括MEMORY存储引擎,MERGE存储引擎,ARCHIVE,BDB,Federated,TOKUDB

原文地址:https://www.cnblogs.com/flamechan1981/p/11727479.html

时间: 2024-11-16 00:31:49

MYSQL 存储引擎概述的相关文章

mysql基础之-mysql存储引擎概述(八)

0x01 mysql 存储引擎:存储引擎也通常被称作“表类型” mysql> show engines;   --- 查看当前所有所支持的存储引擎 mysql> show table status 存储引擎格式: SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr] mysql> show table status in hellodb where Name='class'\G Name 表名 Engi

MySQL存储引擎概述

一.MySQL支持插件式存储引擎,默认包括有多种存储引擎,还可以自己定制化引擎,引擎是在表级别设置的. 二.各种存储引擎的特性 (A) MyISAM :不支持事务.不支持外键.访问速度快. 每个MyISAM表在磁盘上存储成3个文件,文件名与表名相同,扩展名是: (A1) frm (存储表定义) (A2) MYD (MYData, 存储数据) (A3) MYI (MYIndex, 存储索引) 数据文件和索引文件可以放置在不同的目录,平均分布IO,获得更快的速度.可以在创建表的时候,指定该表的 DA

MySQL学习笔记(1) - 存储引擎概述

和大多数数据库不同,在MySQL中存在一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎. 一.MySQL存储引擎概述 插件式存储引擎是MySQL数据库最重要的特征之一,用户可以根据应用的需要寻找如何存储和索引数据.是否使用事务等.MySQL默认支持多种存储引擎,以适用于不同领域的数据库应用需求,用户可以通过选择选择不同的存储引擎提供应用的效率,提供灵活的存储,用户甚至可以按照自己的需要定制和使用自己的存储引擎,以实现最大程度的可定制性. MySQL支持的存储引擎包括MyISAM.In

7.Mysql存储引擎

7.表类型(存储引擎)的选择7.1 Mysql存储引擎概述 mysql支持插件式存储引擎,即存储引擎以插件形式存在于mysql库中. mysql支持的存储引擎包括:MyISAM.InnoDB.BDB.MEMORY.MERGE.EXAMPLE.NDB Cluster.ARCHIVE.CSV.BLACKHOLE.FEDERATED等. 其中:InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表: 默认存储引擎(即建表时不指定存储引擎),mysql5.5开始默认存储引擎为InnoDB,my

第 3 章 MySQL 存储引擎简介

3.1MySQL 存储引擎概述 到后来,MySQL 意识到需要更改架构,将前端的业务逻辑和后端数据存储以清晰的层次结构拆分开的同时,对ISAM 做了功能上面的扩展和代码的重构,这就是MyISAM存储引擎的由来. MySQL 的插件式存储引擎主要包括MyISAM,Innodb,NDB Cluster,Maria,Falcon, Memory,Archive,Merge,Federated 等,其中最著名而且使用最为广泛的MyISAM 和Innodb两种存储引擎.MyISAM 是MySQL 最早的I

mysql存储引擎的种类与区别(innodb与myisam)

查找数据库的存数引擎: show engines show variables like '%storage_engine%' 更改数据库的引擎更改配置文件/etc/my.cnf 修改default-storage-engine=InnoDB(需要更改的存储引擎),然后重启数据库 service mysqld restart alter table engine=innodb 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存

MySql存储引擎+表解压缩机制+索引+查询缓存机制+慢查询日志

一.大型网站优化之MySql优化 1.优化和不优化的对比的 在业界当中我们有一个叫大数据(big data)的概念,所谓的大数据指代千万级别以上的数据作为起步的数据.所以我们现在需要对两张都具有50331650条记录的表进行查询对比,其中表名为tbl_no的表是没有做过任何优化手段的表,表名为tbl_yes的表是做过优化手段的表.这个实验的目的是观察具有优化手段和不具有优化手段的查询中速度的差别. 实验条件: 1)两张表的数据记录总数是相同的 2)两张表的数据字段结构也是一样的 3)查询的记录的

解析MySQL的体系架构及学习Mysql存储引擎MyISAM和InnoDB

mysql体系结构: 由:连接池组件.管理服务和工具组件.sql接口组件.查询分析器组件.优化器组件. 缓冲组件.插件式存储引擎.物理文件组成.mysql是独有的插件式体系结构,各个存储引擎有自己的特点. mysql各个存储引擎概述: (1) innodb存储引擎:[/color][/b] 面向oltp(online transaction processing).行锁.支持外键.非锁定读.默认采用repeaable级别(可重复读)通过next-keylocking策略避免幻读.插入缓冲.二次写

mysql存储引擎

mysql的物理文件组成包括错误日志,查询日志,慢查询日志,事务日志,二进制日志. 日志文件中记录mysql数据库运行期间发生的变化,记录mysql数据库的客户端连接状况,sql语句的执行情况和错误信息. mysql的逻辑结构可以看成是二层架构,第一层叫做SQL layes,数据库系统处理底层数据库之前的所有工作都在这一层完成,包括权限判断,sql解析,执行计划优化,query cache的处理等.第二层就是存储引擎层,叫做storage engine layes,也是底层数据存取操作实现部分,