mysql常用搜索引擎
innoDB简介
innoDB引擎,它是一个事务型的引擎,它设计为了处理大量数据提供高性能的服务。它支持事物处理、实现sql标准的四种隔离级、支持行级锁但行级锁并不是决对的、外键以及利用事物日志进行数据的恢复,不支持FULLTEXT类型的索引,清空表时不会新建表而是一行一行删除。适合需要事物,大量数据读写的项目。
MyISAM简介
MyISAM引擎是mysql的默认引擎,它可以高性能的读取。表级别锁,记录了全表的行数,当使用count时不会进行全表扫描,不支持事物,对表进行insert和update时会对表进行锁定,发生故障无法恢复。适合不需要事物,读取频繁,插入少的项目。
引擎对比
对比 | innoDB | MyISAM |
---|---|---|
主外键 | O | X |
事物 | O | X |
锁 | 行级,操作时指锁定一行,适合高并发 | 表级,操作时会锁住整张表 |
缓存 | 既缓存索引又缓存数据,对内存要求高,内存影响性能 | 只缓存索引不缓存数据 |
表空间 | 大 | 小 |
关注点 | 事物 | 性能 |
innoDB死锁
innoDB是行级别锁,但mysql行级锁不是锁主整行,而是锁主索引,索引又分为主键索引和非主键索引,当操作了主键,则锁住主键,当操作了非主键索引,则会先锁住这个非主键索引再去锁住主键。这样就造成了会出现死锁的现象。
查询时MyISAM为什么比innoDB快
innoDB既要缓存索引又要缓存数据,而MyISAM只缓存索引。
innoDB寻址是先映射到块再映射到行,而MyISAM直接映射到文件的偏移量。
innoDB要维护多版本并发控制。
总而言之innoDB需要维护的东西比MyISAM多。