数据库
首页 > 数据库> > 【DB笔试面试358】在MySQL中如何有效的删除一个大表?

【DB笔试面试358】在MySQL中如何有效的删除一个大表?

作者:互联网

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=


Q          题目

 

在MySQL中如何有效的删除一个大表?




     
A          答案          


在Oracle中对于大表的删除可以通过先TRUNCATE + REUSE STORAGE参数,再使用DEALLOCATE逐步缩小,最后DROP掉表。在MySQL中,对于大表的删除,可以通过建立硬链接(Hard Link)的方式来删除。建立硬链接的方式如下所示:

ln big_table.ibd big_table.ibd.hdlk

建立硬链接之后就可以使用DROP TABLE删除表了,最后在OS级别删除硬链接的文件即可。

为什么通过这种方式可以快速删除呢?当多个文件名同时指向同一个INODE时,此时这个INODE的引用数N>1,删除其中任何一个文件都会很快。因为其直接的物理文件块没有被删除,只是删除了一个指针而已。当INODE的引用数N=1时,删除文件时需要把与这个文件相关的所有数据块清除,所以会比较耗时。



watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=


DB笔试面试历史连接  

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

About Me:小麦苗      

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● QQ:646634621  QQ群:618766405

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=



本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签:删除,DB,MySQL,INODE,链接,大表
来源: https://blog.51cto.com/lhrbest/2705764