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

     最近碰到面试题问到MySQL存储引擎,然后发现自己有点懵。。。回来后看了相关知识点,希望对以后面试的各位有帮助

    先看看自己数据库默认当前的存储引擎:输入show variables like '%storage_engine%'; 

    MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM)

    再查看mysql有哪些引擎:输入 show engines

    看到许多博客和相关介绍常用到的引擎主要有:MyISAM 、InnoDB 、MEMORY 、MERGE 

    尴尬的是不确定MyISAM 和 InnoDB 怎么发音,然后搜索了一下 MyISAM 发音为 "my-z[ei]m"; InnoDB 发音为 "in-no-db" 

    下图是根据查看相关博客以及参考存储引擎对比做的一张比较表格:

    InnoDB :

    提供了具有提交、回滚、崩溃恢复能力的事务安全,但是会占用更多空间用以保存数据和索引。

    支持外键,创建外键的时候,要求父表必须有对应的索引,子表在创建索引的时候也会自动创建对应的索引。

    存储表和索引有两种方式,

    使用共享表空间存储,表结构保存在.frm文件中,数据和索引在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以是多个文件。

    使用多表空间存储,表结构保存在.frm文件中,每个表的数据和索引单独保存在.ibd中。

    具体可以参考链接详细介绍Innodb:https://www.cnblogs.com/Aiapple/p/5689634.html

     MyISAM :

    MySQL默认数据库引擎,不支持事务、外键,速度快,用于无事务要求或者select、insert为主的场景。

    会创建3个文件.frm(存储表定义),.MYD(MYData,存储数据),.MYI(MYIndex,存储引擎)。

    支持3中存储格式,静态(固定长度)表,动态表,压缩表。

    静态表是默认格式,固定长度速度快,但是占空间大。记录长度不够时会用空格填充,读取数据时会清除空格,存在吃尾部空格的情况。

    动态表包含变长字段,记录不是固定长度,占用空间少,但是频繁更新和删除会产生随便,需要定期整理,并且在出现故障时恢复比较困难。

    压缩表由mysiampack工具创建,空间小。

    MEMORY:

    使用存在于内存中的内容来创建表,访问速度快,默认使用HASH索引,服务关闭数据会丢失。

    用于内容变化不频繁的代码表,或者作为统计操作的中间结果表。

    MERGE:

    一组MyISAM表的组合,这些表必须结构完全相同。

    MERGE表本身没有数据,CRUD时其实操作的是内部的MyISAM表。

    Drop只是删除MERGE的定义,对于内部表没有影响。

     总结:现在MySQL5.5以后默认的存储引擎是Innodb,现在许多大厂云服务器不支持MyISAM.建议详细了解Innodb就可以了。

              MyISAM和Innodb如何选择,取决于你是否需要支持事物,如果表中大多数都是查询可以考虑MyISAM,读写频繁可以选择Innodb。不过系统崩溃情况下,MyISAM回复比较困难。其实从Innodb是默认推荐存储引擎就可以显而易见,最好的肯定拿出来当牌面用。

  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/mhSui/p/10722931.html
Copyright © 2011-2022 走看看