赞
踩
对比于二叉搜索树、AVL树和红黑树,一般用于数据内存查找。他们不适合用于数据量很大的情况,因为一次性无法加载到内存中。
上面方法其实只在内存中保存了每一项数据信息中需要查找的字段以及数据在磁盘中的位置,整体的数据实际也在磁盘中(但是读取磁盘的速度相较于内存来说,那真的是慢的不行)。
缺陷:
那如何加速对数据的访问呢?
B树是一颗M路的平衡多叉搜索树。
性质:
为了简单起见,假设M = 3. 即三叉树,每个结点中的孩子数量为M=3个,关键字数量为M-1=2个,孩子永远比关键字多一个。
插入过程总结:
总结:
B+树相比于B树又是更加明显,因为B树的规则有点绕并且复杂,其次B树不方便遍历(要么使用层序遍历,要么使用递归遍历)
B+树相比于B树的变化:
B*树相比于B+树变化:
MyISAM引擎是MySQL5.5.8版本之前默认的存储引擎,不支持事务,支持全文检索,使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址,其结构如下:
上图是以以Col1为主键,MyISAM的示意图,可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。如果想在Col2上建立一个辅助索引,则此索引的结构如下图所示:
同样也是一棵B+Tree,data域保存数据记录的地址。因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。 MyISAM的索引方式也叫做“非聚集索引”
总结:
InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理的应用,从MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。InnoDB支持B+树索引、全文索引、哈希索引。但InnoDB使用B+Tree作为索引结构时,具体实现方式却与MyISAM截然不同
。
第一个区别是InnoDB的数据文件本身就是索引文件。MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而InnoDB索引,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
上图是InnoDB主索引(同时也是数据文件)的示意图,可以看到叶节点包含了完整的数据记录,这种索引叫做聚集索引(简单说:不需要在通过辅助索引先找到主键的key值,然后在找到存储在磁盘中的具体位置,而是直接存放的一个地址就是数据存放在磁盘中的位置)。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
第二个区别是InnoDB的辅助索引data域存储相应记录主键的值而不是地址,所有辅助索引都引用主键作为data域。
聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索 引获得主键,然后用主键到主索引中检索获得记录。
简单理解事务:
一张表存储的大家微信钱包的月
A转账100元给B
update Amoney = Amoney-100 from xxx where name = A;
update Bmoney = Bmoney+100 from xxx where name = B;
假设第一条执行成功,第二条执行失败,那么这里就会出现大问题。所以要么都成功,要么都失败,事务就可以解决这个事情
执行两条sql语句之前开启事务
执行两条sql成功,则提交事务
执行失败,则回滚事务(这里可以去结合数据库的索引事务在进一步了解)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。