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

  • 相关阅读:
    用jQuery写的一个简单的弹出窗口(IE7\IE8\FF3)
    live write test
    sql2
    查询所有表索引
    java初学问题记录(2012.02.092012.02.16)
    SQL
    centso7网卡bond
    vmware模板
    Dockerfile参考
    Docker简单介绍
  • 原文地址:https://www.cnblogs.com/gczheng/p/9328393.html
Copyright © 2011-2022 走看看