zoukankan      html  css  js  c++  java
  • MySQL的数据引擎讲解

    一、MySQL的数据引擎讲解

    在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIASM。

    1.简单介绍这两种引擎,以及该如何去选择。

    • a.Innodb引擎,Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。它本身实际上是基于Mysql后台的完整的系统。Mysql运行的时候,Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是,该引擎是不支持全文搜索的。同时,启动也比较的慢,它是不会保存表的行数的。当进行Select count(*) from table指令的时候,需要进行扫描全表。所以当需要使用数据库的事务时,该引擎就是首选。由于锁的粒度小,写操作是不会锁定全表的。所以在并发度较高的场景下使用会提升效率的。

    • b.MyIASM引擎,它是MySql的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行Insert插入和Update更新语句时,即执行写操作的时候需要锁定这个表。所以会导致效率会降低。不过和Innodb不同的是,MyIASM引擎是保存了表的行数,于是当进行Select count(*) from table语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的。可以将MyIASM作为数据库引擎的首先。

    • c.大容量的数据集时趋向于选择Innodb。因为它支持事务处理和故障的恢复。Innodb可以利用数据日志来进行数据的恢复。主键的查询在Innodb也是比较快的。

    • d.大批量的插入语句时(这里是INSERT语句)在MyIASM引擎中执行的比较的快,但是UPDATE语句在Innodb下执行的会比较的快,尤其是在并发量大的时候。

    2.两种引擎所使用的索引的数据结构是什么?

    答案:都是B+树!

    • MyIASM引擎,B+树的数据结构中存储的内容实际上是实际数据的地址值。也就是说它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。

    • Innodb引擎的索引的数据结构也是B+树,只不过数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。

    二、Innodb与MyIASM引擎的区别与应用场景

    1. Innodb与MyIASM引擎的区别

    • (1)事务处理:
      MyIASM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理);

    • (2)锁机制不同:
      MyIASM是表级锁,而InnoDB是行级锁;

    • (3)select ,update ,insert ,delete 操作:
      MyIASM:如果执行大量的SELECT,MyISAM是更好的选择。
      InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

    • (4)查询表的行数不同:
      MyIASM:select count() from table,MyISAM只要简单的读出保存好的行数,注意的是,当count()语句包含 where条件时,两种表的操作是一样的。
      InnoDB : InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。

    • (5)外键支持:
      mysiam表不支持外键,而InnoDB支持。

    2. 为什么MyIASM会比Innodb 的查询速度快

    INNODB在做SELECT的时候,要维护的东西比MyIASM引擎多很多;
    1)数据块,INNODB要缓存,MyIASM只缓存索引块, 这中间还有换进换出的减少;
    2)innodb寻址要映射到块,再到行,MyIASM记录的直接是文件的OFFSET,定位比INNODB要快;
    3)INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护。
    MVCC ( Multi-Version Concurrency Control )多版本并发控制 。

    3. 应用场景

    MyIASM适合:(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。

    InnoDB适合:(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。

    参考:http://blog.csdn.net/lulei1217/article/details/50954232
    参考:https://www.cnblogs.com/changna1314/p/6878900.html

  • 相关阅读:
    Hbase的数据目录更换后server is not running yet报错
    挂载新加4T硬盘到home目录
    Hadoop(二)--Hadoop运行模式
    Hadoop(一)--Hadoop框架介绍
    KubeSphere(四)--Devops工程pipeline
    KubeSphere(三)--示例:安装wordpress到k8s
    KubeSphere(二)--多租户管理权限控制
    KubeSphere(一)--基于k8s安装KubeSphere
    com.alibaba.fastjson.JSON.toJSONString使用时值为NULL的属性被忽略的问题
    数据库命令-实战
  • 原文地址:https://www.cnblogs.com/hgnulb/p/9555480.html
Copyright © 2011-2022 走看看