2011-11-05 130 views
0

我有一张存储复杂查询数据的表格。该表格被截断并每小时新填充一次。正如您可能认为这是出于性能原因,应用程序访问此表而不是查询。如何避免炸毁交易记录?

是截断并插入唯一的方法来解决这个任务便宜,或者有关于事务日志的其他可能性?

回答

1

如果我假设是正确的,您将此表用作临时表来存储一些记录,并且希望每隔一小时从该表中删除所有记录,对吗?

截断总是被最小化记录。所以是的,截断,然后插入将工作。另一种选择是创建一个具有相同结构的新表。删除旧表,然后将新表重命名为旧表名。

如果您想避免上述情况,您可以探索“简单”恢复模型(这对恢复时间点有影响 - 因此如果在同一数据库中有其他表,请对此非常小心)。或者你可以创建一个只有这个表的新数据库,将这个数据库的恢复设置为“简单”。简单的恢复模式将帮助您保持较小的t-log。最后,如果您必须完全恢复并且不能使用上面的“truncate”或“drop”选项,那么您至少应该定期备份t-log(取决于它的增长有多大)和你有多少空间)。

+0

+1如果该表未与其他用户共享,那么使用#temp可能会获得一些性能优势。我认为即使日志记录不简单,你也可以放弃#temp。由于您将结果保留长达一个小时,因此您似乎可以接受陈旧的读取,因此可以在查询中使用(nolock)提示。 – Paparazzi

+0

“截断总是被最小化记录,所以是的,截断然后插入将起作用。”它是填充日志的INSERT语句吗? 为什么创建表的形式是“select * into source_table中的hourely_table”不填充日志? – Ice

+0

取决于你如何做插入。通常,插入完全记录。某些批量插入操作的记录最少。请参阅http://msdn.microsoft.com/en-us/library/ms191244.aspx以获取可以最小化记录和在什么情况下执行的操作列表。 –