zoukankan      html  css  js  c++  java
  • InnoDB引擎,从大表中删除多行

    官方建议:

    • InnoDB Tables

    • If you are deleting many rows from a large table, you may exceed the lock table size for an InnoDB table. To avoid this problem, or simply to minimize the time that the table remains locked, the following strategy (which does not use DELETE at all) might be helpful:

    -- 1.Select the rows not to be deleted into an empty table that has the same structure as the original table:
    
    INSERT INTO t_copy SELECT * FROM t WHERE ... ;
    
    -- 2.Use RENAME TABLE to atomically move the original table out of the way and rename the copy to the original name:
    
    RENAME TABLE t TO t_old, t_copy TO t;
    
    -- 3.Drop the original table:
    
    DROP TABLE t_old;
    

    大概意思:

    你要detele大表中的多行,则可能导致锁定的表的数据量太多,innodb_buffer_pool没有足够空间来执行。为了避免这个问题,或者为了最小化减少持有表锁的时间,你还不如创建一张同样结构的表,把不删除的数据放里面,然后重命名原始表,并给新表命名为原始表的原始表名,这样还快一点

    mysql会报错"ERROR 1206 (HY000): The total number of locks exceeds the lock table size",InnoDB引擎会因需要锁的行太多而抛出这个错误。解决就加大innodb_buffer_pool_size

  • 相关阅读:
    springboot1.x+dubbo案例
    dubbo相关的博文
    druid监控配置
    Tomcat启动报错整理
    Hibernate @OneToMany等注解设置查询过滤条件等
    异常处理
    复杂的xml转化为java实体
    简单Java类与XML之间的转换
    mysql errno 150
    JdbcTemplate进行查询
  • 原文地址:https://www.cnblogs.com/gczheng/p/9328393.html
Copyright © 2011-2022 走看看