MySql中MyISAM和InnoDB的区别
面试好几次都被问道这个问题,一直说不清楚,后来自己又复习了一下,这里总结一下。
一、存储引擎
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型。
二、MySql中的存储引擎
1)MyISAM:这种引擎是MySql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM和压缩MyISAM三种。但是,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。
2)MyISAM Merge引擎: 这种类型的引擎MyISAM的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。
3)InnoDB: InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。
4)memory: 这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种数据类型常应用于临时表中。
5)archive: 这种类型只支持select和insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。
三 、MyISAM和InnoDB及区别
1.MyISAM不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
- InnoDB支持事务,也支持外键。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。
- 锁机制方面:InnoDB支持数据行锁定,MyISAM不支持行锁定,只支持锁定整个表。即MyISAM同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读请求又有写请求,默认写请求的优先级高,即使读请求先到,所以MyISAM不适合于有大量查询和修改并存的情况,那样查询进程为长时间阻塞。因为MyISAM是锁表,所以某项读操作比较耗时会使其他写进程饿死。
网友评论