zoukankan      html  css  js  c++  java
  • MyISAM与InnoDB 的区别

    1. 事务:InnoDB支持,MyISAM不支持,在InnoDB中每一条SQL语句都会默认封装成事务自动提交,然而这样会影响速度,因此最好把多条SQL语句放在begin和commit之间组成一个事务;

    2. 索引:InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),而辅助索引包含主键列(主索引)。
             MyISAM是非聚集索引,也是使用B+Tree作为索引结构,但索引和数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的。
     
    3.全文索引:Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;不过MySQL在5.7版本以后,InnoDB支持全文索引了。
     
    4.外键:InnoDB支持外键,而MyISAM不支持。
     
    5.count()函数:InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
     
    6.主键:InnoDB表必须有主键(没有指定的话引擎会自动寻找找或生产一个主键),而Myisam可以没有。
     
    7.存储文件类型:InnoDB存储文件有frm、ibd,而MyISAM是frm、myd、myi

                  frm是表定义文件,ibd是数据文件,myd是数据文件,myi是索引文件

    8.表锁:MyISAM只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁;

        InnoDB支持表、行(默认)级锁;

        InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上,就是说如果访问没有命中索引的话是无法使用行锁会退化为表锁。

        比如:有一张InnoDB表,t_user(id,name,age,address),id为PK  无其它索引

        update t_user set age = 18 where id = 2 ;   命中索引,行锁

        update t_user set age = 20 where id != 6 ;   未命中索引,表锁

        update t_user set age = 21 where name = "Jie" ;  无索引,表锁

    总结:
     
        MyISAM不支持事务,而且不支持外键,如果对数据库表需要执行大量的 SELECT 操作,MyISAM比较适合
     
        InnoDB支持外键、行锁、事务是他的最大特点。如果有大量的 UPDATE 和 INSERT,建议使用InnoDB
  • 相关阅读:
    25个妙招儿,帮你每天挤出一小时
    怎样把outlook只最小化到托盘中而不再任务栏中显示
    背完这999句,你的英语口语绝对没有问题了!
    掌握自己的未来
    asp.net page liftcycle
    [转]浅析软件项目管理中十个误区
    明确一个古老的问题left join,right join,inner join,full join,cross join
    项目管理缩略语英中注释表
    30秒清除你电脑中的垃圾(使你的电脑急速如飞)
    看美片必备英语常识(转载)
  • 原文地址:https://www.cnblogs.com/jie-y/p/11153926.html
Copyright © 2011-2022 走看看