现在的位置: 首页 > 综合 > 正文

mysql存储引擎&索引存储结构

2017年08月21日 ⁄ 综合 ⁄ 共 1296字 ⁄ 字号 评论关闭

什么是存储引擎呢?

    存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。

    Oracle SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

 

MySql中有哪些存储引擎?

    1、MyISAM:这种引擎是MySQL的默认存储引擎。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种。但是,不管是何种MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。 

    2InnoDBInnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引

    3Memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。

    4Archive:这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。

 

/*------------------------------------------------------------------------------------------------------------------*/

MySQL中两大主要存储引擎MyISAMInnoDB采用了不同的索引和存储策略,本文将分析它们的异同和性能。


MySQL主要提供2种方式的索引:B-Tree(包括B+Tree)索引,Hash索引。

B树索引具有范围查找和前缀查找的能力,对于N节点的B树,检索一条记录的复杂度为O(LogN)

哈希索引只能做等于查找,但是无论多大的Hash表,查找复杂度都是O(1)

显然,如果值的差异性大,并且以等于查找为主,Hash索引是更高效的选择,它有O(1)的查找复杂度。如果值的差异性相对较差,并且以范围查找为主,B树是更好的选择,它支持范围查找。

 

注:B树属于二叉平衡树,平衡树就是任何一个节点的左右节点高度差距不能超过1的树,这才是绝对平衡的树。平衡树比较好的算法AVL,它通过左旋、右旋及其组合的操作可以保证树绝对平衡

一棵mB(balanced tree of order m)是一棵平衡的m路搜索树,深度为m。它或者是空树,或者是满足下列性质的树:

1、根结点至少有两个子女;

2、每个非根节点所包含的关键字个数 满足:┌m/2┐ - 1 <= j <= m - 1

3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 满足:┌m/2┐ <= j <= m 

4、所有的叶子结点都位于同一层。

 

 

抱歉!评论已关闭.