MySQL一种存储引擎擎是什么

几个常用一种存储引擎擎的特点

丅面我们重点介绍几种常用的一种存储引擎擎并对比各个一种存储引擎擎之间的区别和推荐使用方式

下面是常用一种存储引擎擎的适用環境:

}
  • 二、mysql支持的一种存储引擎擎
库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel处理图片用png等 数据库中的表也应该有不同的类型,表的类型不同会对应mysql不同的存取机制,表类型又称为一种存储引擎擎 一种存儲引擎擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方 法。因为在关系数据库中数据的存儲是以表的形式存储的所以一种存储引擎擎也可以称为表类型(即存储和 在Oracle 和SQL Server等数据库中只有一种一种存储引擎擎,所有数据存储管理機制都是一样的而MySql 数据库提供了多种一种存储引擎擎。用户可以根据不同的需求为数据表选择不同的一种存储引擎擎用户也可以根据 洎己的需要编写自己的一种存储引擎擎

 SQL 解析器、SQL 优化器、缓冲池、一种存储引擎擎等组件在每个数据库中都存在,但不是每 个数据库都有这麼多一种存储引擎擎。MySQL 的插件式一种存储引擎擎可以让一种存储引擎擎层的开发人员设 计他们希望的存储层,例如,有的应用需要满足事务的偠求,有的应用则不需要对事务有这 么强的要求 ;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据 的查询

MySQL一种存储引擎擎介绍

支持事务,其设计目标主要面向联机事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似 Oracle 的非锁定读,即默认读取操作不会產生锁 从 MySQL f
#memory,在重启mysql或者重启机器后表内数据清空 #blackhole,往表内插入任何数据都相当于丢入黑洞,表内永远不存记录
MySQL5.5版本及之后 默认的一種存储引擎擎 MySQL5.5版本之前 默认的一种存储引擎擎 速度要比Innodb更快但是我们更注重的是 数据的安全 内存引擎(数据全部存放在 内存中)断电数據就丢失 无论存什么,都立刻消失(黑洞)
}

      一种存储引擎擎是数据库的核心对于mysql来说,一种存储引擎擎是以插件的形式运行的虽然mysql支持种类繁多的一种存储引擎擎,但是常用的就那么几种这篇文章主要是对其进行一个总结和对比。

来看看当前数据库可以支持的一种存储引擎擎有哪些从下图我们可以看出,MySQL支持9种一种存储引擎擎但最常用嘚也就图中框出的三种,分别为MylSAM一种存储引擎擎、MEMORY一种存储引擎擎和InnoDB一种存储引擎擎

不同的一种存储引擎擎都有各自的特点,以适应不哃的需求如下表所示。为了做出选择首先要考虑每一个一种存储引擎擎提供了哪些不同的功能。

      大家要注意的是MySQL的一种存储引擎擎昰针对数据表的,而不是针对数据库比如,在student数据库中user表的一种存储引擎擎是InnoDB的,而role表的一种存储引擎擎是MylSAM的每张表可以根据实际需求设置不同的一种存储引擎擎。

    在创建数据表的时候可以选择表的一种存储引擎擎如下图所示,为了测试MylSAM存储文件的结构以及特点峩们选择MylSAM。

创建完数据表之后我们可以MySQL的安装目录的data文件夹中查看存储user表的文件结构,如下图所示:

从图中可以看出使用这个一种存儲引擎擎,每个MyISAM在磁盘上存储成三个文件

(1)frm文件:存储表的定义数据,也就是表的结构(Frame)

      frm和MYI可以存放在不同的目录下MYI文件用来存储索引,泹仅保存记录所在页的指针索引的结构是B+树结构。下面这张图就是MYI文件保存的机制:

      从上图可以发现这个一种存储引擎擎通过MYI的B+树结構来查找记录页,再根据记录页查找记录并且支持全文索引、B树索引和数据压缩。

    MylSAM有一个重要的特点那就是不支持事务但是这也意味著他的存储速度更快,如果你的读写操作允许有错误数据的话只是追求速度,可以选择这个一种存储引擎擎

同样的,我们创建一张role表并设置一种存储引擎擎为InnoDB,如下图所示:

我们可以看到在data文件夹有两个文件分别为role.frm和role.ibd,如下图所示其中,frm文件存储表结构idb文件存儲表的索引和数据,正因为数据和索引是聚集到一个文件idb中的所以InnoDB的索引称为聚集索引(B+树的叶子节点包含了完整的数据记录)。

InnoDB一种存储引擎擎的特点

InnoDB给MySQL的表提供了事务处理、回滚、崩溃修复能力多版本并发控制的事务安全在MySQL从3.23.34a开始包含InnnoDB。它是MySQL上第一个提供外键约束的表引擎而且InnoDB对事务处理的能力,也是其他一种存储引擎擎不能比拟的靠后版本的MySQL的默认一种存储引擎擎就是InnoDB。

InnoDB一种存储引擎擎总支持AUTO_INCREMENT自动增长列的值不能为空,并且值必须唯一MySQL中规定自增列必须为主键。在插入值的时候如果自动增长列不输入值,则插入的值为自動增长后的值;如果输入的值为0或空(NULL)则插入的值也是自动增长后的值;如果插入某个确定的值,且该值在前面没有出现过就可以直接插入。

KEY)外键所在的表叫做子表,外键所依赖(REFERENCES)的表叫做父表父表中被字表外键关联的字段必须为主键。当删除、更新父表中的某条信息時子表也必须有相应的改变,这是数据库的参照完整性规则

为什么InnoDB表必须有主键,并且推荐使用整型的自增主键

因为Mysql是通过B+树组织這些索引的,如果不设定主键Mysql会默认生成主键比如rowid等;因为整型的存储比字段类型要小而且正因为是使用的是B+Tree数据结构,在进行查询数據是需要对每个元素进行比较而整型的对比效率是高于其他数据结构的;而且对于自增的主键而言,由于B+树各个节点是有序排列的插叺数据也非常方便

比如对于这棵主键索引树:

如果我们插入 ID = 650 的一行数据那么直接在最右边插入就可以了

      但是如果插入的是 ID = 350 的一行数据,由于 B+ 树是有序的那么需要将下面的叶子节点进行移动,腾出位置来插入 ID = 350 的数据这样就会比较消耗时间,如果刚好 R4 所在的数据页已经滿了需要进行页分裂操作,这样会更加糟糕

      但是,如果我们的主键是自增的每次插入的 ID 都会比前面的大,那么我们每次只需要在后媔插入就行 不需要移动位置、分裂等操作,这样可以提高性能也就是为什么建议使用主键自增的索引。

2.1、主键索引树与非主键索引树

      非主键索引树如下图所示非主键索引的叶子节点存储的是索引的数据(key,比如名字索引Alice)和主键(value,比如15)

      由上图可以看出非主键索引叶子节点保存的是主键的值得到主键的值之后再到主键索引树去搜索一遍,这个过程也成为回表

      联合索引非叶子节点存储的是联合索引(key)和主键(value),其索引的顺序是按索引常见的顺序排的先按第一个索引排序,再按第二个索引排序…

      对于Hash索引的话不支持区间范围查询,但是速度的確比B+树要快B+树的双向链表支持范围查询,但是仅仅简单查询的话Hash索引还是比B+树索引要快的。

}

我要回帖

更多关于 一种存储引擎 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信