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

    概述

    存储引擎是什么?

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

    存储引擎

    1.InnoDB

    InnoDB是一个健壮的事务性存储引擎,有行级锁定和外键约束,适用于以下场合:

    1. 更新密集的表。InnoDB存储引擎适合处理多重并发的更新请求。
    2. 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
    3. 自动灾难恢复。与其他存储引擎不同,InnoDB表能够自动从灾难中恢复。
    4. 外键约束。MYSQL支持外键的存储引擎只用InnoDB。
    5. 支持自动增长列auto_increment属性。

    另外,从MySQL5.7开始InnoDB就成为默认的存储引擎。

    2.MyISAM

    MyISAM表是独立于操作系统的,这说明可以轻松的将其从Windows服务器移植到Linux服务器。每当简历一个MyISAM引擎的表时,就会创建三个文件,文件名是表名,三个文件如下:

    • db_name.frm: 存储表定义
    • db_name.MYD: 存储数据
    • db_name.MYI: 存储索引

    MyISAM引擎不支持事务操作(当然,可以在service层根据自己的业务需求进行相应的控制),MyISQM存储引擎适合在以下情况使用:

    1. 选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点
    2. 插入密集型的表。MyISAM的兵法插入特性允许同时选择和插入书数据。

    3.MRG_MyISAM

    MRG_MyISAM存储引擎是一组MyISAM表的组合,也就是说它将MyISAM引擎的多个表聚合起来,但是它内部没有数据,真正的数据依然在MyISAM引擎的表中。

    例如:同一种类的数据根据时间分为多张表存储,这时查询就会比较麻烦,MRG_MyISAM引擎可以直接将多个表聚合成一个表统一查询。

    4.MEMORY

    Memory存储引擎的出发点是速度。为了得到最快的响应时间,采用的存储介质是系统内存。虽然在内存中存储表数据回提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。另外,它要求存储在数据表中的数据使用的是长度不变的格式,这意味着不能使用blob和text这样的长度可变的数据类型,varchar是一种长度可变的类型,但因为它在MySQL内部当作长度固定不变的char类型,所以可以使用。

    使用Mymory存储引擎的场景:

    1. 目标数据较小,而且被经常频繁的访问。在内存中存放数据,过太大的数据可能造成内存溢出,可以通过参数max_heap_table_size控制Memory表的大小,限制表的最大大小。
    2. 如果数据是临时的,而且要求必须立即可用,那么可以放在内存中。
    3. 存储在Memory表中的数据如果突然丢失,不会对服务器产生实质的负面影响。

    5.CSV

    csv存储引擎是csv格式文件存储数据。

    • 可以将csv文件作为MySQL的表使用,但是不支持索引,不支持分区。
    • 因为csv文件格式的原因,所有的字段必须非空。
    • 其中的每个数据行占用一个文本行。

    因为csv文件可以被Office等软件直接编辑,可能会出现不规则的情况,若出现csv文件中内容损坏的情况,可以使用check table或repair table名零零检查和修复。

    6.ARCHIVE

    archive是归档的意思,仅仅支持插入和查询两种操作,在MySQL5.5以后支持索引功能,有很好的压缩机制,在记录请求时进行实时压缩,所以经常被当作仓库来使用。适合存储大量的独立的作为历史纪录的数据,拥有很高的插入速度但是对查询的支持比较差。

    7.BLACKHOLE

    黑洞存储引擎,所有插入的数据不会保存,boackhole引擎表永远保持为空。服务器会记录下Blackhole表的日志,所以可以用于复制数据到备份数据库。

    8.PERFORMANCE_SCHEMA

    主要用于收集数据库服务器的性能参数。MySQL用户不能创建存储引擎为PERFORMANCE_SCHEMA的表。

    他提供了以下的功能:

    • 提供进程等待的详细信息,包括锁、互斥变量、文件信息。
    • 保存历史的事件汇总信息,为Mysql服务器的性能做出详细的判断。
    • 对于新增和删除监控时间点都非常容易,并可以随意的改变Mysql服务器的监控周期

    9.其他

    当然还有其它一些存储引擎,如FEDERATED、OQGraph、SphinxSE、TokuDB、Cassandra、CONNECT、SQUENCE等。

    常用引擎对比

    不同的存储引擎有各自的特点,根据实际情况选择合适的存储引擎,其对比如下图所示:

    MySQL存储引擎

     

    MySQL操作

    查看支持的存储引擎:

    show engines;

    show enginesG;

    查看mysql存储引擎系统变量:

    MySQL存储引擎

     

    修改数据库引擎:

    方式一:

    修改配置文件my.ini,在[mysqld]后面添加default-storage-engine=InnoDB,重启服务,将数据库默认引擎修改为InnoDB。

    MySQL存储引擎

     

    方式二:

    在建表是指定存储引擎:

    MySQL存储引擎

     

    指定test表的存储引擎为MyISAM。

    方式三:

    建表后更改:

    MySQL存储引擎

     

    更改该表的存储引擎为InnoDB。

    查看表使用的存储引擎:

    MySQL存储引擎

     


    该如何选择合适的存储引擎呢?提供以下几个选择的标准,实际情况灵活选择:

    1. 是否需要支持事务
    2. 是否需要使用热备
    3. 崩溃恢复,能否接收崩溃
    4. 是否需要外键支持
    5. 存储的限制
    6. 对索引和缓存的支持
  • 相关阅读:
    二分查找算法
    http协议。会话控制cookie、session
    154. Find Minimum in Rotated Sorted Array II
    8. String to Integer (atoi)
    528. Random Pick with Weight
    415. Add Strings
    158. Read N Characters Given Read4 II
    157. Read N Characters Given Read4
    19. Remove Nth Node From End of List
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/hujingnb/p/11708866.html
Copyright © 2011-2022 走看看