• MyISAM和Innodb区别,为什么?


    • 事务支持
        MyISAM不支持事务,而InnoDB支持。
        InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,
        所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。
    
        MyISAM是非事务安全型的,而InnoDB是事务安全型的,
        默认开启自动提交,宜合并事务,一同提交,减小数据库多次提交导致的开销,大大提高性能。
    
    • 存储结构
        MyISAM:每个MyISAM在磁盘上存储成三个文件。
                第一个文件的名字以表的名字开始,扩展名指出文件类型。
                .frm文件存储表定义;数据文件的扩展名为.MYD;索引文件的扩展名是.MYI
        InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),
                InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
    
    • 存储空间
        MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表、动态表、压缩表。
        InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
    
    • 可移植性、备份及恢复
        MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
        InnoDB:拷贝数据文件、备份 binlog或者用 mysqldump。
    
    • 事务支持
        MyISAM:不提供事务支持,强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快。
        InnoDB:提供事务支持事务,外部键等高级数据库功能。 
    
    • AUTO_INCREMENT
        MyISAM:引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
        InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。
    
    • 表锁差异
        MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
        InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
    
    • 全文索引
        MyISAM:支持(FULLTEXT类型的)全文索引
        InnoDB:不支持(FULLTEXT类型的)全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
    
    • 表主键
        MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
        InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,
                附加索引保存的是主索引的值。InnoDB的主键范围更大,最大是MyISAM的2倍。
    
    • 表的具体行数
        MyISAM:保存有表的总行数,如果select count(*) from table;会直接取出出该值。
        InnoDB:没有保存表的总行数(只能遍历),如果使用select count(*) from table;就会遍历整个表,消耗相当大,
                但是在加了wehre条件后,myisam和innodb处理的方式都一样。
    
    • CURD操作
        MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
        InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。
                DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,
    
    • 外键
        MyISAM:不支持
        InnoDB:支持
    
    • 查询效率
        没有where的count(*)使用MyISAM要比InnoDB快得多。
        因为MyISAM内置了一个计数器,count(*)时它直接从计数器中读,而InnoDB必须扫描全表。
        所以在InnoDB上执行count(*)时一般要伴随where,且where中要包含主键以外的索引列。
    
  • 相关阅读:
    Jmeter系列(64)- JMeter JSR223 入门
    Jmeter系列(63)- Beanshell 入门
    Jmeter系列(62)- 详解 JSON 断言
    Jmeter系列(61)- 详解断言持续时间
    Jmeter系列(60)- 详解响应断言
    取球游戏|2012年蓝桥杯B组题解析第十题-fishers
    夺冠概率|2012年蓝桥杯B组题解析第九题-fishers
    密码发生器|2012年蓝桥杯B组题解析第八题-fishers
    放棋子|2012年蓝桥杯B组题解析第七题-fishers
    大数乘法|2012年蓝桥杯B组题解析第六题-fishers
  • 原文地址:https://www.cnblogs.com/phonecom/p/10345759.html
Copyright © 2020-2023  润新知