视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL从MyISAM引擎转换到InnoDB引擎需要注意的地方
2020-11-09 13:41:00 责编:小采
文档


分析 当了解完两种引擎的不同之处,很轻松的就能知道有哪些关键点了。 总的来说,从MyISAM转向InnoDB的注意事项有: 1、MyISAM的主键索引中,可以在非第一列(非第一个字段)使用自增列,而InnoDB的主键索引中包含自增列时,必须在最前面;这个特性在discuz论坛

  分析 当了解完两种引擎的不同之处,,很轻松的就能知道有哪些关键点了。

  总的来说,从MyISAM转向InnoDB的注意事项有:

  1、MyISAM的主键索引中,可以在非第一列(非第一个字段)使用自增列,而InnoDB的主键索引中包含自增列时,必须在最前面;这个特性在discuz论坛中,被设计用于“抢楼”功能,因此,若有类似的业务,则无法将该表从MyISAM转成InnoDB,需要自行变通实现(我们则是将其改到Redis中实现);

  2、不带条件频繁统计全表总记录数时(SELECT COUNT(*) FROM TAB),InnoDB相对较慢,而MyISAM则飞快;不过,如果是基于索引条件的统计,则二者相差不大;

  3、InnoDB在5.6以前不支持全文索引,不过这个相信无所谓,没什么人会在MySQL里直接跑全文索引,尤其是对中文的全文索引(前阵子有开发同学提需求直接被我否了),确实有需要的话,可以采用Sphinx、Lucene等其他方案实现;

  4、一次性导入大量数据并且后续还要进行加工处理的,可以先导入到MyISAM引擎表中,经过一通加工处理完后,再导入InnoDB表(我曾经在业务中用此方法提高数据批量导入及处理效率);

  5、InnoDB不支持LOAD TABLE FROM MASTER语法(不过应该也很少人使用吧);

  从MyISAM转成InnoDB可以享受的好处则有:

  1、完整事务特性支持,以及更高的数据并发存取效率,即更高的TPS;

  2、数据库实例异常重启后,InnoDB表能自动修复,而且速度相对更快,而MyISAM需要被触发才能修复,且相对耗时可能多4~5倍甚至更多;

  3、更高的数据读取性能,因为InnoDB把数据及索引同时缓存在内存中,而MyISAM只缓存了索引;

  4、InnoDB支持外键(不过在MySQL中,应该很少人用到外键);

  两个引擎间的重要区别详情见下:

  MyISAM引擎的特点:

  1、堆组织表;

  2、不支持事务;

  "tn-Powered-by-XIUMI">3、数据文件和索引文件分开存储;

  "tn-Powered-by-XIUMI">4、支持全文索引;

  "tn-Powered-by-XIUMI">5、主键索引和二级索引完全一样都是B+树的数据结构,只有是否唯一的区别(主键和唯一索引有唯一属性,其他普通索引没有唯一属性。B+树叶子节点存储的都是指向行记录的row pointer);

  6、有特殊计数器记录当前记录数;

  7、不支持Crash recovery;

  8、索引文件很容易损坏;

  InnoDB引擎的特点

  1、索引组织表;

  2、支持事务;

  "tn-Powered-by-XIUMI">3、数据文件和索引文件存储在同一个表空间中;

  "tn-Powered-by-XIUMI">4、在5.6以前,不支持全文索引;

  "tn-Powered-by-XIUMI">5、主键和二级索引数据结构一样都是B+树,但叶子节点存储的键值不一样(主键的叶子节点存储整行数据,因此也称为聚集索引;而二级索引的叶子节点存储的是主键的键值)

  5、支持Crash recovery;

  6、相同数据量时,InnoDB表空间文件大小约为MyISAM引擎的1.5~2倍;

下载本文
显示全文
专题