了解差异
以下是MySQL中常用的InnoDB和MyISAM两个存储引擎差异。这两个引擎在MySQL数据库中有着广泛的应用,各自具有独特的特点和适用场景。
InnoDB与MyISAM的差异
|
InnoDB |
MyISAM |
事务支持 |
支持ACID事务(原子性、一致性、隔离性、持久性),提供COMMIT、ROLLBACK和SAVEPOINT等事务控制功能。 |
不支持事务,数据一致性只能依赖应用层控制。 |
锁机制 |
采用行级锁定,提高了并发性能,适合频繁的读写操作。 |
使用表级锁定机制,在高并发写操作下性能较差。 |
外键约束 |
支持外键约束,能确保数据的完整性和一致性。 |
不支持外键。 |
崩溃恢复 |
采用了崩溃恢复机制(通过重做日志和回滚日志),在崩溃后可以自动恢复数据。 |
不支持崩溃恢复,发生崩溃时,可能需要手动修复表。 |
性能 |
在读写混合的场景下,由于支持行级锁和外键等特性,性能可能略低于MyISAM(在特定场景下)。但随着MySQL版本的更新,InnoDB的性能得到了不断优化。 |
在读操作远远多于写操作的场景下,性能优于InnoDB,因为表级锁减少了锁竞争。 |
存储效率 |
相较于MyISAM,InnoDB的存储效率可能稍低,因为需要维护额外的事务日志和索引信息。 |
MyISAM表的存储效率较高,磁盘占用较小。 |
全文索引 |
在MySQL 5.6及之后的版本中,InnoDB也支持全文索引。但在此之前,仅MyISAM支持全文索引。 |
支持全文索引,适用于需要全文搜索的应用场景。 |
适用场景 |
需要事务处理的系统,如银行、财务系统等对数据一致性要求较高的场景。以及高并发的读写操作场景。 |
读操作远远多于写操作的场景。不需要事务和外键约束的系统,如一些数据仓库或数据分析应用。 |
切换步骤
宝塔面板直接用数据库工具切换



或者直接在数据库执行以下命令:(注意你的数据库表可能下面的不一样)
ALTER TABLE bbs_attach ENGINE=InnoDB;
ALTER TABLE bbs_attach_buy ENGINE=InnoDB;
ALTER TABLE bbs_cache ENGINE=InnoDB;
ALTER TABLE bbs_darkroom ENGINE=InnoDB;
ALTER TABLE bbs_favorite ENGINE=InnoDB;
ALTER TABLE bbs_forum ENGINE=InnoDB;
ALTER TABLE bbs_forum_access ENGINE=InnoDB;
ALTER TABLE bbs_group ENGINE=InnoDB;
ALTER TABLE bbs_kv ENGINE=InnoDB;
ALTER TABLE bbs_modlog ENGINE=InnoDB;
ALTER TABLE bbs_mypost ENGINE=InnoDB;
ALTER TABLE bbs_mythread ENGINE=InnoDB;
ALTER TABLE bbs_notice ENGINE=InnoDB;
ALTER TABLE bbs_post ENGINE=InnoDB;
ALTER TABLE bbs_post_search ENGINE=InnoDB;
ALTER TABLE bbs_post_update_log ENGINE=InnoDB;
ALTER TABLE bbs_questions ENGINE=InnoDB;
ALTER TABLE bbs_queue ENGINE=InnoDB;
ALTER TABLE bbs_session ENGINE=InnoDB;
ALTER TABLE bbs_session_data ENGINE=InnoDB;
ALTER TABLE bbs_table_day ENGINE=InnoDB;
ALTER TABLE bbs_thread ENGINE=InnoDB;
ALTER TABLE bbs_thread_digest ENGINE=InnoDB;
ALTER TABLE bbs_thread_search ENGINE=InnoDB;
ALTER TABLE bbs_thread_top ENGINE=InnoDB;
ALTER TABLE bbs_tiny ENGINE=InnoDB;
ALTER TABLE bbs_user ENGINE=InnoDB;
ALTER TABLE bbs_user_points_log ENGINE=InnoDB;
ALTER TABLE bbs_viewlog ENGINE=InnoDB;
然后使用下面命令来查看当前数据库中所有表的状态信息,包括它们的存储引擎:(注意修改数据库名称)
SHOW TABLE STATUS FROM your_database_name;
暂无评论