广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 线上数据库清理数据的方法
  • 880
分享到

MySQL 线上数据库清理数据的方法

MySQL数据库清理数据MySQL线上数据库清理 2022-05-14 19:05:45 880人浏览 薄情痞子
摘要

01 场景分析  今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了看数据的分布,大概是要删除数据表中的两千七百多万条记录,数据表的总记录是两千八百多万,也就是说,要删除的记录占了总记

01 场景分析

 今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了看数据的分布,大概是要删除数据表中的两千七百多万条记录,数据表的总记录是两千八百多万,也就是说,要删除的记录占了总记录的绝大部分比重,两千七百多万的数据记录,要是删除的话,使用的时间是相当长的,对线上的业务肯定会造成影响。这里将实际的应用案例简单重构为以下方法:


Mysql> select date,count(*) from test.tbl_a  group by date;
+----------+----------+
|   date | count(*) |
+----------+----------+
| |  63103 |
| 20190118 | |
| |  125916 |
| 20190120 |   |
| |  129198 |
| 20190122 |  |
| | 5191247 |
+----------+----------+
 rows in set (13.21 sec)

上面就是重构之后的表的结构,我们可以看到,test数据库中的表tbl_b按照date分组之后,每个组的数据量都不小,而我们的需求是将date为20190118和20190123的记录删除,可以看到这两种记录总计有两千多万条,占了表中数据的绝大部分,如果直接删除的话,线上的业务肯定会受到阻塞。

以下是操作方法,需要注意的是,应用下面的操作方法的前提是:

要删除的数据占了数据表中的绝大部分。

02 操作办法

 通过分析,知道剩余的表数据对于全表来说是很小的一部分,这个操作我们分为4步:

我们先把剩余的数据存入到另外一个数据库test1中:


create table test1.tbl_b_new as 
select * from test.tbl_b 
where date in(,,,,);

这个操作的时间只有3s左右;

我们在test1数据库中创建一个同名的表tbl_b,它的结构和test数据库中的tbl_b数据结构一致:


create table test1.tbl_b like test.tbl_b;

紧接着,我们使用数据库中的rename操作将表test中的表tbl_b和test1中的表tbl_b进行交换,等价于将test数据库中的表所有数据清除。


RENAME TABLE test.tbl_b  TO test1.tbl_b_bak,
         test1.tbl_b  TO test.tbl_b,
         test1.tbl_b_bak TO test1.tbl_b;

再讲第一步保存的剩余数据填充到新表中来,如下:


insert into test.tbl_b select * from  test1.tbl_b_new;

03 结果分析

 看上去我们好像把问题搞复杂了,直接删除的事情,被我们搞的多了好几个步骤,但是实际上不是这样的,这一套操作可以帮我们节省好几分钟时间,对线上业务的影响也更小,原因如下:

  1. 我们使用create table as的方法创建剩余的数据表,这种方法使我们仅对数据表中的少部分数据进行了操作。避免了我们对过多的数据进行扫描。
  2. mysql中对大表进行rename的操作,rename命令会直接修改底层的.frm文件,所以它的速度是相当之快的。

   第二个特点给我们提供了一种思路,在一个很着急的业务中,要使用一个表的时候,往往不给我们留充足的时间备份表,如果我们想要删除一个大表里面的数据,而且需要进行相关备份,我们可以通过rename操作迅速处理,然后再想办法去备份rename之后的表。

    上面的例子中使用create table as 和create table like两种克隆表的方式,有几点需要注意:

create table like方式会完整地克隆表结构,但不会插入数据,需要单独使用insert into或load data方式加载数据
create table as  方式会部分克隆表结构,完整保留数据

    如果有兴趣,可以做做试验进行验证。

以上就是Mysql 线上数据库清理数据的方法的详细内容,更多关于MySQL 线上数据库清理数据的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 线上数据库清理数据的方法

本文链接: https://www.lsjlt.com/news/10251.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 线上数据库清理数据的方法
    01 场景分析  今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了看数据的分布,大概是要删除数据表中的两千七百多万条记录,数据表的总记录是两千八百多万,也就是说,要删除的记录占了总记...
    99+
    2022-05-14
    MySQL 数据库清理数据 MySQL 线上数据库清理
  • MySQL线上数据库怎么清理数据
    这篇文章将为大家详细讲解有关MySQL线上数据库怎么清理数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。01 场景分析 今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了...
    99+
    2023-06-14
  • mysql数据库之清空表中数据的方法
    mysql数据库之清空表中数据的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!在做数据迁移,数据清洗或者写web项目时...
    99+
    2022-10-18
  • mysql清空数据表数据的方法
    这篇文章将为大家详细讲解有关mysql清空数据表数据的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在mysql中,可以利用“DELETE”和“TRUNCAT...
    99+
    2022-10-18
  • mysql数据库日志清理的方法是什么
    MySQL数据库的日志清理有以下几种方法: 通过重启MySQL服务器来清理日志。当MySQL服务器重启时,会自动清理并重新生成日...
    99+
    2023-10-25
    mysql数据库
  • MySQL数据库线上修改表结构的方法
    目录一、MDL元数据锁1、什么是MDL锁2、MDL锁的问题二、如何线上修改MySQL表结构一、MDL元数据锁 在修改表结构之前,先来看下可能存在的问题。 1、什么是MDL锁 MySQ...
    99+
    2022-11-13
  • wordpress数据库优化和清理冗余数据的方法
    提示:清理前请先备份数据库,以防出意外。 经实践发现,只要执行依次执行下面5个语句,就可以清理的比较干净了。尤其是 wp_posts 这个表,看看这个表有多少条记录。记录数应该等于你在后台管理界面看到的文章数目+页面数目...
    99+
    2022-06-12
    wordpress 数据库优化 冗余数据
  • 线上mysql数据库备份
    #!/bin/bash #=============================================================================# FileName: M...
    99+
    2022-10-18
  • 清空phpmyadmin数据库的方法
    这篇文章给大家分享的是有关清空phpmyadmin数据库的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。方法一:通过PhpMyAdmin勾选数据表、手动删除这是一个传统的方法...
    99+
    2022-10-18
  • 清除phpmyadmin数据库的方法
    这篇文章给大家分享的是有关清除phpmyadmin数据库的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、使用phpmyadmin工具批量删除mysql数据库表  ...
    99+
    2022-10-18
  • mysql连上本地数据库的方法
    这篇文章主要介绍mysql连上本地数据库的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql连上本地数据库的方法:首先打开电脑Navicat for mysql;然后进行点...
    99+
    2022-10-18
  • mysql数据库清空表数据的语句
    mysql清空表数据命令有以下两种语句:语句1:delete from 表名;语句2:truncate table 表名;比  较:(1)不带where参数的delete语句可...
    99+
    2022-10-18
  • win7上python2.7连接mysql数据库的方法
    一:安装MySQL-python驱动 pip install mysql 二:连接到MySQL服务器的test数据库 #!/usr/bin/python # -*- coding: UTF...
    99+
    2022-06-04
    数据库 方法 mysql
  • Oracle 11g清理数据库历史日志的方法
    这篇文章主要介绍了Oracle 11g清理数据库历史日志的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 创建存放数据库待删除日志文...
    99+
    2022-10-18
  • navicat清除数据库备份的方法
    小编给大家分享一下navicat清除数据库备份的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!第一步,打开Navicat。第二步,打开mysql数据库连接。第三步,点击备份所在的数据库...
    99+
    2022-10-18
  • mysql连接不上数据库的解决方法
    小编给大家分享一下mysql连接不上数据库的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!解决方法:首先按下键盘上的“w...
    99+
    2022-10-18
  • mysql数据库创建数据表的方法
    小编给大家分享一下mysql数据库创建数据表的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!mysql创建数据表的方法:使用sql通用语法【CREATE TABLE table_nam...
    99+
    2022-10-18
  • MySQL数据库中备份数据的方法
    MySQL数据库中备份数据的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!想进行数据库的备份首先要在命令行窗口进入My...
    99+
    2022-10-18
  • sql如何清理数据库表的数据
    SQL语言提供了多种方法来清理数据库表的数据,可以使用DELETE、TRUNCATE和DROP TABLE语句来删除表的数据...
    99+
    2023-09-04
    sql 数据库
  • mysql清空表数据的方法有哪些
    这篇文章将为大家详细讲解有关mysql清空表数据的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在MySQL中删除数据有两种方式:truncate(截短)属于粗...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作