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

  • 相关阅读:
    NOI2005维修数列
    BZOJ1208 [HNOI2004]宠物收养所
    BZOJ3223 文艺平衡树
    BZOJ [JSOI2008]星球大战starwar
    BZOJ1013 [JSOI2008]球形空间产生器sphere
    小程序之底部tabBar
    es6
    vue.js安装
    模块打包工具webpack
    highchart
  • 原文地址:https://www.cnblogs.com/gczheng/p/9328393.html
Copyright © 2011-2022 走看看