zoukankan      html  css  js  c++  java
  • InnoDB引擎与MyIASM的一点总结

    InnoDB引擎:

    提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别

    提供了行级锁和外键约束。

    它的设计的目标是处理大容量数据库系统,用于缓冲数据和索引。

    不支持FULLTEXT类型的数据,没有保存表的行数,当select count*from table  时需要扫描全表。

    使用数据库事务时,该引擎是首选。

    由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用InnoDB效率会提升。

    行级锁也不是绝对的, 如果只在执行一个SQL语句时不能确定要扫描的范围,InnoDB同样会锁定全表。

    MyIASM引擎:

    没有提供对数据库事务的支持,也不支持行级锁和外键

    因此在insert update时需要锁定全表,效率会降低。

    存储了表的行数,当select count(*) from table 时只需要直接读取已经保存好的值而不用扫描全表。

    如果读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。

    两种引擎的比较:

    大尺寸的数据集趋向于选择InnoDB引擎,因为它支持事务处理和故障恢复。数据库大小决定了故障恢复的时间长短。InnoDB引擎可以利用事务日志进行数据恢复。

    主键查询在InnoDB引擎下会相当快

    大批量的insert语句(在每个insert语句中写入多行,批量插入)在MyISAM下会快一点。

    Update语句在InnoDB下会更快一点。


     数据结构:

    B-Tree

    每个节点最多可以有d个分支,d成为B-Tree的度

    B-Tree中的元素都是有序的,比如图中元素7左边的指针指向的节点中的元素都小于7,而元素7和16之间的指针指向的结点中的元素都处于7和16之间。正是满足这样的关系,才能实现高效的查找:首先从根节点进行二分查找,找到就返回对应的值,否则就进入相应的区间结点递归查找,直到找到对应的元素或找到null指针,找到null指针则表示查找失败。时间复杂度为O(logN).

     

    B+Tree:

     

     

    B+tree内部节点不存储数据,只存储指针,而叶子节点则只存储数据,不存储指针。

    MyISAM的 B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。

    InnoDB引擎的索引结构同样是B+Tree,但InnoDB的索引文件本身就是数据文件,即B+Tree的数据区域存储的就是实际的数据,这种索引就是聚簇索引。

    聚簇索引的数据的物理结构存放顺序与索引顺序是一致的,即:只要索引的事相邻的,那么对应的数据一定也是相邻地存放在磁盘上。

  • 相关阅读:
    css基础
    html常用标签
    自写一个ant-design-pro AnimationList组件
    设计一个A表数据抽取到B表的抽取过程
    垂直、水平方向观看楼层天际线不变情况下能增加的建筑物高度最大总和
    JavaScript 新旧替换一:变量声明
    前端异常类型及捕获方式
    自定义 create-react-app
    Git Commit 规范参考
    JavaScript 团队规范参考
  • 原文地址:https://www.cnblogs.com/xuesheng/p/7928962.html
Copyright © 2011-2022 走看看