zoukankan      html  css  js  c++  java
  • 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利用事务日志进行数据恢复,这会比较快
  • 相关阅读:
    hdu 1588 求f(b) +f(k+b) +f(2k+b) +f((n-1)k +b) 之和 (矩阵快速幂)
    poj 3233 S = A + A^2 + A^3 + … + A^k A是一个n X n矩阵 (矩阵快速幂)
    hdu 1757 和1005差不多 (矩阵快速幂)
    D 矩阵快速幂
    poj 3734 方块涂色 求红色 绿色方块都为偶数的方案数 (矩阵快速幂)
    hdu 1005 根据递推公式构造矩阵 ( 矩阵快速幂)
    hdu 4549 M斐波拉契 (矩阵快速幂 + 费马小定理)
    UVa 1643 Angle and Squares (计算几何)
    UVa 11040 Add bricks in the wall (水题递推)
    UVa 1336 Fixing the Great Wall (区间DP)
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7909335.html
Copyright © 2011-2022 走看看