首页 技术 正文
技术 2022年11月21日
0 收藏 546 点赞 3,247 浏览 809 个字

mysql 中常用的删除的方法基本上有下面三种方式:

1、delete  

  一般用于删除少量表中的数据

  优化建议,一定要加上where 条件,并且where条件的列上 一定要有主键或者索引。否则会出现全表扫描的情况

2、drop

  直接将表删除,包括表的数据和表的定义。

  这种操作,MySQL 会加上一个全局锁,删除期间会阻塞操作,所以对大表来说这样操作一定会对生产造成很大的影响

  优化建议,大表不要使用drop  table 这种方式,可以考虑 truncate  table的方式

3、truncate

  这种方式要优于 drop table,风险较之 drop 要小一点,不需要加锁,所以删除表的速度很快

  注意事项:这种方式虽然很快,但是需要考虑删除大文件对IO产生的影响

使用下面的骚操作更安全吆!

以上三种方式的各有适用的场景,下面介绍一种删除大表又同时能够规避删除大文件带来 IO 过载风险的方式。

1、对表的 idb 文件创建硬链接,这样实际存储的文件上有两个inode指向这个文件。当文件有两个及以上硬连接时,对文件删除,操作系统只会删除这个硬链接,而不是实际上的文件

2、drop   table   table_name;这样实际上删除的是ibd 文件的硬链接,速度会非常快,不用考虑锁操作

3、这样 drop 掉表之后,数据文件实际上还是存在的,所以我们还要删除文件系统中的文件

4、使用操作系统的 truncate 工具可以指定将文件削减到指定大小,所以我们可以使用这个工具控制删除文件的速度,也就是说可以控制 IO 的占用

  truncate 工具使用实例:

  

for i in  `seq     - `;
do
sleep
truncate -s ${i}G /data/test.ibd.hardlk
done
rm -rf /data/mysql/mytest/erp.ibd.hardlk
上面代码就是讲一个 300G的文件每次减小 10G,间隔 2秒,最后剩余 10G 用rm -rf 删除即可。
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,893