insert into select后磁盘空间的问题

maycxd 2014-09-03 01:54:22
请问下比如2个数据库A和B,结构都是一模一样的,我insert into A.XX select from B.XX之后,然后把B库转移到A库的数据都删了,但是我发现磁盘的空间这样就突然少了好多(我转移了大量的数据),百度了下insert into select其实会造成2倍的数据量,但是A库里并没有多出数据,也没有存在临时表,请问我该如何恢复那些少了的磁盘空间~!
...全文
258 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-09-03
  • 打赏
  • 举报
回复
如果是简单恢复模式,一般不用管。如果是非简单模式: 第一步:做一次完整备份 第二步:做一次日志备份 第三步:收缩“日志文件”,但是不要一下子收缩太猛,不然稍微增删改一点点数据,日志又开始增长,影响性能。 除了上面步骤之外,如果你的表有聚集索引,重建一下聚集索引再收缩数据文件,也能进一步减少空间 还有一点,如果你要全表删除,用truncate table xxx 而不要用delete from xxx,前者速度更快,占用日志空间更少,但是很难恢复(针对误操作的情况)
maycxd 2014-09-03
  • 打赏
  • 举报
回复
谢谢版主,是不是我只要把A和B库的日志文件做下截断,清空日志文件,这样就能解决我的问题?
發糞塗牆 2014-09-03
  • 打赏
  • 举报
回复
主要占用空间的部分为: 1、日志,在非简单模式下,如果你进行大数据量加载,需要记录大量日志,并且这些日志只有进行日志备份才能截断,然后才能收缩(这些是常规手段,用暴力手段除外)。这部分是你这个情况的主要消耗部分。 2、如果你的表上有索引,那么索引也要占用空间,而且数据插入时,如果有索引,那么会根据默认的填充因子填充数据页,有时候并不一定填满了才分页,另外分配区也会造成空间的“浪费” 简单来说,插入过程需要先分配一定的空间,然后再插入,而你删除数据后,如果需要回收空间: 1、做日志备份,然后收缩日志。 2、收缩数据文件

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧