• InnoDB与Myisam的区别


    如何选择存储引擎:

    如果不在乎可扩展能力和并发能力,也不在乎崩溃后数据的所示问题,却对innoDB的空间占用过多比较敏感,这种场合应该使用MyISAM。否则应该使用InnoDB。如果需要使用在线热备份,需要使用事务的订单类业务,最好使用InnoDB。

    1.构成

    MyISAM:每个MyISAM在磁盘上存储成三个文件,文件的名字以表的名字开始,扩展名指出文件类型。 

    .frm表定义文件
    .myd数据文件
    .myi 索引文件
    InnoDB包括数据文件和它的日志文件,表大小只受限于操作系统文件的大小,一般为 2GB。
    错误日志:记录出错信息,也记录一些警告信息或者正确的信息。
    查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行。
    慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。
    二进制日志:记录对数据库执行更改的所有操作。
     
    2.事务处理上
    MyISAM:为了强调性能,不提供事务支持;
    InnoDB供事务支持事务,外部键等功能
     
    3.SELECT UPDATE,INSERT,Delete操 作
    MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。因为
    a.MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引。而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小
    b.数据块,INNODB要缓存,MYISAM只缓存索引块,  这中间还有换进换出的减少;
    c.innodb寻址要映射到块,再到行,MYISAM记录的直接是文件的OFFSET,定位比INNODB要快
    d.innodb还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护MVCC (Multi-Version Concurrency Control)多版本并发控制 
     
    4.对AUTO_INCREMENT的 操作
    MyISAM:为INSERT和UPDATE操作自动更新这一列,更好和更快。可以和其他字段一起建立联合索引
    InnoDB必须包含只有该字段的索引,它被用在为该列赋新值。
     
    5.表 的具体行数
    MyISAM:select count(*) from table 只要简单的读出保存好的行数
    InnoDBselect count(*) from table  扫描一遍整个表来计算有多少行
    注意:当count(*)语句包含 where条件时,两种引擎的操作是一样的
     
    6.锁
    MyISAM:不支持行级锁,只支持表锁
    InnoDB提供行锁但是如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。默认事务隔离级别是repeatable read,通过间隙锁(next-key locking)避免幻读的出现。
     
    7.数据恢复
    MyISAM:恢复时间较长
    InnoDB利用事务日志进行数据恢复,这会比较快
  • 相关阅读:
    统计学习方法学习笔记第二章(感知机)
    filebeat句柄占用问题
    小组年终总结的汇总
    使用docker制作zookeeper镜像
    普罗米修斯在k8s上面的部署
    k8s亲和性和反亲和性的理解
    AlertManager 的在k8s集群上面的安装部署使用
    filebeat生产上面镜像制作的流程
    普罗米修斯生产上面的性能优化点
    AlertManger集群的搭建
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7909335.html
Copyright © 2020-2023  润新知