博客
关于我
mysql更改表引擎INNODB为MyISAM的方法总结
阅读量:789 次
发布时间:2023-02-12

本文共 1030 字,大约阅读时间需要 3 分钟。

如何将InnoDB表转换为MyISAM表?以下是两种常见方法,并比较它们的优缺点。

方法一:直接更改存储引擎

ALTER TABLE `wp_posts` ENGINE = MyISAM;

这种方法简单直接,但在数据量较大的情况下可能会非常耗时。例如,在我的测试中,16777216条记录需要2分钟多的时间完成。

方法二:分批处理

  • 创建一个中间临时表:
  • CREATE TABLE `tt7_tmp` LIKE `tt7`;
    1. 将原始表的数据复制到临时表中:
    2. INSERT INTO `tt7_tmp` SELECT * FROM `tt7`;
      1. 删除原始表的数据:
      2. TRUNCATE TABLE `tt7`;
        1. 将数据从临时表复制回原表:
        2. INSERT INTO `tt7` SELECT * FROM `tt7_tmp`;
          1. 最后,修改表的存储引擎:
          2. ALTER TABLE `tt7` ENGINE = InnoDB;

            这种方法在数据量较大的情况下性能更优,但需要分批处理,尤其是在处理大量数据时,可能会显著减少事务日志的生成量。

            存储引擎对比

            InnoDB

            • 优点
              • 支持事务处理和ACID兼容。
              • 行级锁机制,提供更高的并发性能。
              • 支持外键约束。
              • 数据和索引存放在同一个表空间中,适合大型数据量。
            • 缺点
              • 对内存和磁盘空间要求较高。
              • 全文索引支持较差。

            MyISAM

            • 优点
              • 默认存储引擎,适合小型和中等数据量的应用。
              • 查找速度较快,特别是对于简单的SELECT查询。
              • 数据存储在多个文件中,便于跨平台迁移。
            • 缺点
              • 不支持事务处理,无法保证数据原子性。
              • 外键约束不支持。
              • COUNT(*)操作需要扫描所有记录。

            性能优化建议

            在进行存储引擎变更时,可以通过以下方式优化性能:

          3. 修改MySQL配置文件:
          4. SET GLOBAL sort_buffer_size=64*1024*1024;SET GLOBAL tmp_table_size=64*1024*1024;SET GLOBAL read_buffer_size=32*1024*1024;SET GLOBAL read_rnd_buffer_size=32*1024*1024;
            1. 临时修改配置参数,以加快变更速度,但记得在完成后恢复原来的配置。
            2. 在选择存储引擎时,应综合考虑数据量、事务需求、查询类型以及应用场景。InnoDB更适合需要事务支持和大数据量的项目,而MyISAM则适合小型和读取频率高的场景。

    转载地址:http://sndfk.baihongyu.com/

    你可能感兴趣的文章
    mysql执行顺序与索引算法
    查看>>
    mysql批量update优化_Mysql中,21个写SQL的好习惯,你值得拥有呀
    查看>>
    mysql批量update操作时出现锁表
    查看>>
    MYSQL批量UPDATE的两种方式
    查看>>
    mysql批量修改字段名(列名)
    查看>>
    MySQL批量插入数据遇到错误1213的解决方法
    查看>>
    mysql技能梳理
    查看>>
    MySQL报Got an error reading communication packets错
    查看>>
    Mysql报错Can‘t create/write to file ‘/tmp/#sql_3a8_0.MYD‘ (Errcode: 28 - No space left on device)
    查看>>
    MySql报错Deadlock found when trying to get lock; try restarting transaction 的问题解决
    查看>>
    MySQL报错ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘
    查看>>
    Mysql报错Packet for query is too large问题解决
    查看>>
    mysql报错级别_更改MySQL日志错误级别记录非法登陆(Access denied)
    查看>>
    Mysql报错:too many connections
    查看>>
    MySQL报错:无法启动MySQL服务
    查看>>
    mysql授权用户,创建用户名密码,授权单个数据库,授权多个数据库
    查看>>
    mysql排序查询
    查看>>
    MySQL排序的艺术:你真的懂 Order By吗?
    查看>>
    MySQL排序的艺术:你真的懂 Order By吗?
    查看>>
    Mysql推荐书籍
    查看>>