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的数据区域存储的就是实际的数据,这种索引就是聚簇索引。

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

  • 相关阅读:
    天天生鲜项目需求分析——基于Django框架的天天生鲜电商网站项目系列博客(一)
    预训练模型专题_GPT2_模型代码学习笔记
    Logistic模型原理详解以及Python项目实现
    【人生苦短,我学 Python】基础篇——基本语句(Day5)
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    程序员常用的六大技术博客类
    [慕课笔记]Node入口文件分析和目录初始化
    如何在面试中脱颖而出?
    程序媛,坚持这几个好习惯让你越来越美
    2017前端精品面试文章总结
  • 原文地址:https://www.cnblogs.com/xuesheng/p/7928962.html
Copyright © 2011-2022 走看看