🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### InnoDB 是 MySQL 默认的事务型存储引擎,只有在需要它不支持的特性时,才考虑使用其它存储引擎。 特性: * 支持事务 * 支持行级锁 * 并发性能更好 * CPU及内存缓存页优化使得资源利用率更高 实现了四个标准的隔离级别,默认级别是可重复读(REPEATABLE READ)。在可重复读隔离级别下,通过多版本并发控制(MVCC)+ Next-Key Locking 防止幻影读。 >主索引是聚簇索引,在索引中保存了数据,从而避免直接读取磁盘,因此对查询性能有很大的提升 > 在InnoDB 中存在表锁和行锁,不过行锁是在命中索引的情况下才会起作用,当索引失效时行锁也会失效 内部做了很多优化,包括从磁盘读取数据时采用的可预测性读、能够加快读操作并且自动创建的自适应哈希索引、能够加速插入操作的插入缓冲区等。 支持真正的在线热备份。其它存储引擎不支持在线热备份,要获取一致性视图需要停止对所有表的写入,而在读写混合场景中,停止写入可能也意味着停止读取 ***** 【总结】 * InnoDB 支持表锁和行锁,使用索引作为检索条件修改数据时采用行锁,否则采用表锁; * InnoDB 自动给修改操作加锁,给查询操作不自动加锁 * 行锁可能因为未使用索引而升级为表锁,所以除了检查索引是否创建的同时,也需要通过explain执行计划查询索引是否被实际使用 * 行锁相对于表锁来说,优势在于高并发场景下表现更突出,毕竟锁的粒度小 * 当表的大部分数据需要被修改,或者是多表复杂关联查询时,建议使用表锁优于行锁 * 为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接影响到一个数据库的并发处理能力和性能