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

  • 相关阅读:
    python之函数对象、函数嵌套、名称空间与作用域、装饰器
    python之函数
    python基础-小练习
    python基础之文件操作
    python基础之字符编码
    web开发-Django博客系统
    HotSpot的算法实现
    垃圾回收机制(GC)
    Java注意点...
    JVM内存区域及对象
  • 原文地址:https://www.cnblogs.com/gczheng/p/9328393.html
Copyright © 2011-2022 走看看