SQL2005删除大量数据压缩后数据库文件未明显变小,怎么回事?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL2005删除大量数据压缩后数据库文件未明显变小,怎么回事?相关的知识,希望对你有一定的参考价值。
数据库中有一张表数据特别多,特意清理了一下,删除数据前,该表占用1767.383MB,数据297万条记录,整个数据库文件大小2.06G。
删除大部分记录后,该表占用925.953MB,数据55W条,进行了压缩数据库和文件后,仍然有1.88G。
表的占用空间缩小了841MB,但数据库文件却只缩小了180G,剩下的在哪?我要怎么才能彻底的把空间找回来?求助高手帮忙啊
日志文件已经清理了,上面说的数据库文件只是值得MDF文件,日志文件已经清理了
delete删除数据 虽然数据被删除了 但存储数据的空间还在的 这个是不会被删除的
只有truncate 才会删除这些空间
但truncate 删除只能清空 不能加条件
不过你不用担心 delete虽然保留删除数据的空间 但只要以后有数据插进来 就会用到这些空间
如果以后不插数据 那么这些空间就浪费掉了
有问题再问 参考技术A 数据删除了
但空间并没有删除
这个你放心
虽然没有删除
但以后插入的数据会用到此空间的
只有truncate
才会删除空间和数据
但这个不能加条件
如果真要这样做的话
只有把你需要保留的数据转移临时表
清空之后再插回来 参考技术B 你是用的delete删除吧,delete是不会立即释放空间的,具体的操作你可以参照
http://www.itpub.net/thread-1620605-3-1.html
这个问题和你的一样,而且很多大师给出了很好的建议,结合你的实际情况取最佳的吧追问
他们说的是Oracle啊,我要的是SQL2005的操作方法啊
参考技术C经过测试可以知道,只有insert和truncate 操作不写入log日志表,为了不丢失数据,可以做一张中间表(表2),步骤如下:
写trigger,在数据插入表1的时候同时往表2中插入数据,
记录某个时间点,truncate table 表2,
再将表1中这个时间点到某个时间段的记录插入到表2,(这个时候,表1一直在插入数据,由trigger写到表2中)
truncate table 表1,
压缩数据库文件
再压缩日志文件
关于mysql 删除数据后(.MYD,MYI)物理空间未释放
关于mysql 删除数据后物理空间未释放 OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。OPTIMIZE TABLE 是指对表进行优化。如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化。这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费 。OPTIMIZE TABLE 命令只对 MyISAM 、 BDB 和 InnoDB 表起作用 。表优化的工作可以每周或者每月定期执行,对提高表的访问效率有一定的好处,但是需要注意的是,优化表期间会锁定表,所以一定要安排在空闲时段进行。
手册中关于OPTIMIZE的一些用法和描述
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用 OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新 利用未使用的空间,并整理数据文件的碎片。 在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次 即可,只对特定的表运行。 OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。 注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。
以上是关于SQL2005删除大量数据压缩后数据库文件未明显变小,怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章
如何删除大量数据 sql server2005 数据量在8千万左右??