zoukankan      html  css  js  c++  java
  • MYSQL存储引擎笔记


    640?wx_fmt=jpeg

    一、InnoDB存储引擎

    在MySQL 5.5及以后的版本中,InnoDB是MySQL的默认引擎,这些年来,InnoDB一直在持续改进,处理能力不断提高,其优秀的性能和可维护性使它成为生产中普遍推荐使用的引擎。它的优点有:

    1、灾难恢复性好。

    2、支持全部4种级别的事务。默认的事务隔离级别是可重复读(Repeatable Read),它的事务支持是通过多版本并发控制(MVCC)来提供的。

    3、使用行级锁。

    4、对于InnoDB引擎中的表,其数据的物理组织形式是簇表(Cluster Table),数据按主键来组织,也就是说主键索引和数据是在一起的,数据按主键的顺序物理分布。数据表的另一种常见形式是非簇表,其索引是有序的,而数据是无序的。

    5、实现了缓冲管理,不仅能缓冲索引也能缓冲数据,并且会自动创建散列索引以加快数据的获取。相比之下,MyISAM只是缓存了索引。

    6、支持外键。

    7、支持热备份。

    二、MyISAM存储引擎

    MyISAM是MySQL5.0/5.1的默认引擎,但MySQL官方的重心早已不在MyISAM引擎上了,近些年来,MyISAM一直没有大的改进,由于它有许多缺陷,如不支持事务、灾难恢复性差,所以不建议在生产环境中使用。

    以下是MyISAM的一些特性。

    1、可以配合锁,实现操作系统下的复制备份、迁移。

    2、使用表级锁,并发性差。

    3、支持全文检索(MySQL InonoDB在5.6以后也支持全文检索)。

    4、主机宕机后,MyISAM表易损坏,灾难恢复性不佳。

    5、无事务支持。

    6、只缓存索引,数据的缓存是利用操作系统缓冲区来实现的。可能引发过多的系统调用且效率不佳。

    7、数据紧凑存储,因此可获得更小的索引和更快的全表扫描性能。

    三、MEMORY存储引擎

    MEMORY存储引擎提供“内存”表,也不支持事务、外键。

    使用内存表(内存引擎)可以显著提高访问数据的速度,可用于缓存会频繁访问的、可以重构的数据、计算结果、统计值、中间结果,但也有如下这些不足之处。

    使用的是表级锁,虽然内存访问快,但如果频繁地读写,表级锁可能会成为瓶颈所在。

    只支持固定大小的行。VARCHAR类型的字段会存储为固定长度的CHAR类型,浪费空间。

    不支持TEXT、BLOB字段。当有些查询需要使用到临时表(使用的也是MEMORY存储引擎)时如果表中有TEXT、BLOB字段,那么会转化为基于磁盘的MyISAM表,严重降低性能。

    由于内存资源成本昂贵,一般不建议设置过大的内存表,如果内存表满了,就会在MySQL错误日志里发现类似“The table‘table_name’is full”这样的错误,可通过清除数据或调整内存表参数来避免报错。

    服务器重启后数据会丢失,复制维护时需要小心。

    四、ARCHIVE存储引擎

    ARCHIVE存储引擎是被设计用来存储企业中的大量流水数据的存储引擎。ARCHIVE引擎使用zlib无损数据压缩,让数据都保存在压缩的存档表中。当数据被插入时,它们被压缩。

    它只支持INSERT和SELECT,支持自增键及其上的索引,不支持其他索引。它适合做日志记录、用户行为分析,不需要UPDATE、DELETE和索引的数据。

    下图为各种存储引擎的特性介绍

    640?wx_fmt=png


    文章基于MySQL DBA修炼之道整理,版权属于原作者

  • 相关阅读:
    机器学习算法最深刻的讲解,包含海量数据处理算法
    从海量数据中寻找出topK的最优算法代码
    转载:基于 Hive 的文件格式:RCFile 简介及其应用---推酷
    原创:自定义三叉树(二)--基于搜索推荐系统根据用户搜索频率(热搜)排序
    原创:协同过滤之ALS
    AT2705 Yes or No(组合数学)
    LUOGU P4609 [FJOI2016]建筑师(第一类斯特林数)
    BZOJ 4710: [Jsoi2011]分特产(容斥)
    51nod 1518 稳定多米诺覆盖(容斥+二项式反演+状压dp)
    BZOJ 3944: Sum(杜教筛)
  • 原文地址:https://www.cnblogs.com/hgmyz/p/12351105.html
Copyright © 2011-2022 走看看