This topic has been archived. It cannot be replied.
-
工作学习 / 专业技术讨论 / SQL Server 的问题,从优化的角度来讲,是drop一个table 然后用select into 语句来重新create一个新table好呢,还是直接delete all records then insert new records好? 这个loop会重复100次左右, 谢谢
-zxcvb(朝天椒);
2006-2-13
(#2780889@0)
-
drop table 大概会快些,但是drop table会删除所有的关系, 如果你的表由foreignkey之类的,可能会需要额外的工作。
-canadiantire(轮胎-M.I.N.K.);
2006-2-13
(#2780911@0)
-
谢谢, 是些独立的table所以没有relationship方面的顾虑
-zxcvb(朝天椒);
2006-2-13
(#2780972@0)
-
大量频繁的drop重建用户表有三大缺点:一是造成系统表的锁竞争乃至死锁,二是造成用户表ID耗尽报错(须重新初始化),三是新建的表需要相应存储过程重新优化耗费CPU资源。正确的做法是......正确的做法是先truncate表,然后Insert数据(能BCP最好)。有索引的话最好删除,Insert完数据后再重建。关于BCP和重建索引有很多优化方式,查查手册吧。
-pipe(Pipe);
2006-2-13
{142}
(#2780992@0)
-
谢谢
-zxcvb(朝天椒);
2006-2-13
(#2781018@0)
-
另外不要直接drop用户表,先truncate掉数据后再drop,速度会快无数倍(对数据量大的表)。
-pipe(Pipe);
2006-2-13
(#2781035@0)
-
太感谢了
-zxcvb(朝天椒);
2006-2-13
(#2781225@0)
-
Truncate 和 Select Into 都可以减少日志的产生. 先Truncate再delete 再Select into是比较快一些. 当然效率也跟数据量有关,100多行的话没本质区别.
-hard20(hard20);
2006-2-13
(#2781408@0)
-
SQLServer 就不知道了,Oracle的话,delete all record 是不好的,应该用Truncate talbe,Drop table 有很严重的后果,所有的相关的reference都会失效,而且可能会有lock.如果不是真的要drop就别用drop,而且10g以后还有recycle的问题。
-neow(neo);
2006-2-13
(#2781444@0)