• 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
  • 相关阅读:
    Python3开发环境及基本语法(一)
    PostMan接口测试工具
    Jmeter接口测试(三)
    Jmeter接口测试(二)
    Jmeter接口测试(一)
    Fiddler抓包工具
    HTTP协议数据结构分析
    CentOS7种搭建FTP服务器
    CentOS7 apache创建虚拟路径
    CentOS7上搭建WordPress博客
  • 原文地址:https://www.cnblogs.com/jie-y/p/11153926.html
Copyright © 2020-2023  润新知