最新MySQL中最新MyISAM与InnoDB的详细区别

分类:Database, 发布于 2019-09-20  浏览(123)

一、不同点

1. InnoDB支持事物,而MyISAM不支持

2. InnoDB支持行级锁,而MyISAM支持表级锁

3. InnoDB支持MVCC, 而MyISAM不支持

4. InnoDB支持外键,而MyISAM不支持

5. InnoDB不支持全文索引,而MyISAM支持。

6. InnoDB不能通过直接拷贝表文件的方法拷贝表到另外一台机器, MyISAM支持

7. InnoDB表支持多种行格式, MyISAM不支持

8. InnoDB是索引组织表, MyISAM是堆表


二、InnoDB引擎的4大特性

1. 插入缓冲(insert buffer)

2. 二次写(double write)

3. 自适应哈希索引(ahi)

4. 预读(read ahead)


三、各种不同 MySQL版本的InnoDB的改进

MySQL5.6 下 InnoDB 引擎的主要改进:

1. online DDL

2. memcached NoSQL 接口

3. transportable tablespace( alter table discard/import tablespace)

4. MySQL 正常关闭时,可以 dump 出 buffer pool 的( space, page_no),重启时 reload,加快预热速度

5. 索引和表的统计信息持久化到 mysql.innodb_table_stats 和mysql.innodb_index_stats,可提供稳定的执行计划

6. Compressed row format 支持压缩表


MySQL 5.7 InnoDB引擎主要改进

1. 修改 varchar 字段长度有时可以使用 online DDL

2. Buffer pool 支持在线改变大小

3. Buffer pool 支持导出部分比例

4. 支持新建 InnoDBtablespace,并可以在其中创建多张表

5. 磁盘临时表采用 InnoDB 存储,并且存储在 InnoDB temp tablespace 里面,以前是 MyISAM 存储

6. 透明表空间压缩功能


四、2者select  count(*)哪个更快,为什么

MyISAM更快,因为MyISAM内部维护了一个计数器,可以直接调取。


五、2 者的索引的实现方式

都是 B+树索引, InnoDB是索引组织表, MyISAM是堆表, 索引组织表和堆表的区别要熟悉

MySQL之drop、delete、truncate的区别

分类:Database, 发布于 2019-09-20  浏览(110)

一、不同点

1.truncate table 和 delete只删除记录不删除表的结构,drop语句将删除表的结构依赖的约束(constrain),触发器(trigger),索引(index);

语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态 

2.truncate之后的自增字段从头开始计数了,而delete的仍保留原来的最在数值。

 

二、总结:

1.在速度上,一般来说,drop> truncate > delete。

2.在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

3.如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;
如果想删除表,当然用drop;
如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;
如果和事务有关,或者想触发trigger,还是用delete
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据