zoukankan      html  css  js  c++  java
  • MySql常用两大存储引擎简介

    MyISAM存储引擎简介

    MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件。

    首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.MYI文件,分别存放了表的数据(.MYD)索引数据(.MYI)。每个表都有且仅有这样三个文件做为MyISAM存储类型的表的存储,也就是说不管这个表有多少个索引,都是存放在同一个.MYI文件中。

    MyISAM支持以下三种类型的索引:

    1、B-Tree索引

    B-Tree索引,顾名思义,就是所有的索引节点都按照balancetree的数据结构来存储,所有的索引数据节点都在叶节点。

    2、R-Tree索引

    R-Tree索引的存储方式和b-tree索引有一些区别,主要设计用于为存储空间和多维数据的字段做索引,所以目前的MySQL版本来说,也仅支持geometry类型的字段作索引。

    3、Full-text索引

    Full-text索引就是我们长说的全文索引,他的存储结构也是b-tree。主要是为了解决在我们需要用like查询的低效问题。

    MyISAM上面三种索引类型中,最经常使用的就是B-Tree索引了,偶尔会使用到Full-text,但是R-Tree索引一般系统中都是很少用到的。另外MyISAM的B-Tree索引有一个较大的限制,那就是参与一个索引的所有字段的长度之和不能超过1000字节

    MyISAM存储引擎的表是否足够可靠呢?在MySQL用户参考手册中列出在遇到如下情况的时候可能会出现表文件损坏:

    1、当mysqld正在做写操作的时候被kill掉或者其他情况造成异常终止;

    2、主机Crash;

    3、磁盘硬件故障;

    4、MyISAM存储引擎中的bug?

    MyISAM存储引擎的某个表文件出错之后,仅影响到该表,而不会影响到其他表,更不会影响到其他的数据库。如果我们的数据库正在运行过程中发现某个MyISAM表出现问题了,则可以在线通过checktable命令来尝试校验他,并可以通过repairtable命令来尝试修复。在数据库关闭状态下,我们也可以通过myisamchk工具来对数据库中某个(或某些)表进行检测或者修复。不过强烈建议不到万不得已不要轻易对表进行修复操作,修复之前尽量做好可能的备份工作,以免带来不必要的后果。

    Innodb 存储引擎简介

    在MySQL中使用最为广泛的除了MyISAM之外,就非Innodb莫属了。Innodb做为第三方公司所开发的存储引擎,和MySQL遵守相同的开源License协议。

    Innodb之所以能如此受宠,主要是在于其功能方面的较多特点:

    1、支持事务安装

    Innodb在功能方面最重要的一点就是对事务安全的支持,这无疑是让Innodb成为MySQL最为流行的存储引擎之一的一个非常重要原因。而且实现了SQL92标准所定义的所有四个级别的要求(READUNCOMMITTED,READCOMMITTED,REPEATABLEREAD和SERIALIZABLE)。

    2、数据多版本读取

    Innodb在事务支持的同时,为了保证数据的一致性已经并发时候的性能,通过对undo信息,实现了数据的多版本读取。

    3、锁定机制的改进

    Innodb改变了MyISAM的表锁机制,实现了行锁。Innodb的行锁机制的实现是通过索引来完成的,而数据库中99%的SQL语句都是要使用索引来做检索数据的。所以,行锁定机制也无疑为Innodb在承受高并发压力的环境下增强了不小的竞争力。

    4、实现外键

    Innodb实现了外键引用这一数据库的重要特性,使在数据库端控制部分数据的完整性成为可能。虽然很多数据库系统调优专家都建议不要这样做,但是对于不少用户来说在数据

    库端加如外键控制可能仍然是成本最低的选择。

    除了以上几个功能上面的亮点之外,Innodb 在物理存储方面,Innodb存储引擎也和MyISAM不太一样,虽然也有.frm文件来存放表结构定义相关的元数据,但是表数据和索引数据是存放在一起的。至于是每个表单独存放还是所有表存放在一起,完全由用户来决定(通过特定配置)。

     

  • 相关阅读:
    hadoop中namenode发生故障的处理方法
    开启虚拟机所报的错误:VMware Workstation cannot connect to the virtual machine. Make sure you have rights to run the program, access all directories the program uses, and access all directories for temporary fil
    Hbase的安装与部署(集群版)
    分别用反射、编程接口的方式创建DataFrame
    用Mapreduce求共同好友
    SparkSteaming中直连与receiver两种方式的区别
    privot函数使用
    Ajax无刷新显示
    使用ScriptManager服务器控件前后台数据交互
    数据库知识
  • 原文地址:https://www.cnblogs.com/shamo89/p/8666465.html
Copyright © 2011-2022 走看看