zoukankan      html  css  js  c++  java
  • mysql 清除大数据表单

    背景:mysql数据库中有个日志表记录高达800多万,影响了mysql的正常业务访问,现需要清理三个月之前的所有数据,大概600多万(大概13G)

    方法一:传统delete from xxx,传统,普通,效率底下,高数据清理容易搞垮数据库。

    方法二:truncate,这个操作会把表中所有的数据给清除掉。(如果是要清空数据的话这个效率最高)。

    方法三:间接法。步骤如下:

    1.创建t_req_log同结构的新表 t_req_log_new 。

    create table  t_req_log_new like t_req_log  或通过原表建表语句创建也行。

    2.访问人数较少时,停web服务(不然会操作还会写日志到该表中)。

    3.执行sql将t_req_log表近三个月的数据导入到t_req_log_new新表中。
    insert into t_req_log_new
    select * from t_req_log where time between '2018-02-01 00:00:00' and NOW();

    4.同时重命名两张表,间接实现数据删除操作,将 t_req_log_new改为原始表名替换原始表。

    RENAME TABLE t_req_log TO t_req_log_old,  t_req_log_new TO  t_req_log;           //注意:改名删表之前一定一定要停服务,不然会导致数据库锁表

    5.删除旧表 (看情况删不删除)。

    drop table t_req_log_old       

    6.重启服务器,观察日志。

    以上操作会比delete删除快n多倍。

    可间隔一段时间执行一次,也可在数据库中做一个事物,自动每日删除

  • 相关阅读:
    从Oracle提供两种cube产品说开
    Sql Server DWBI的几个学习资料
    Unload Oracle data into text file
    初学Java的几个tips
    我常用的Oracle知识点汇总
    benefits by using svn
    如何在windows上使用putty来显示远端linux的桌面
    building commercial website using Microsoft tech stack
    Understand Thread and Lock
    Update google calendar by sunbird
  • 原文地址:https://www.cnblogs.com/dannylinux/p/9040854.html
Copyright © 2011-2022 走看看