2013-01-08 134 views
0

在我的应用程序中,我有一个SQL Server 2008表Employee Swipedaily_Tbl,其中有11列 ,其中插入了员工日常滑动。减少行数

而且我在公司里有大约8000名员工。这意味着每天至少会创建16000行..

我打算删除一个月末的所有行并将它们保存到另一个表以增加性能......或返回从前一个月的数据作为dmb文件从应用程序本身

因为我是SQL Server和DBA的新手,任何人都可以建议是否有更好的主意?

我可以从应用程序创建转储文件吗?

+0

什么是哑文件? – Raj

+0

我的意思是.dmb文件 –

+0

@Raj:我假设哑文件实际上是一个**(数据)转储**文件... :-) –

回答

1
  1. 创建一个相同的表
  2. 创建一个SQL脚本复制所有大于给定日期 (说今天的日期),以该表较旧的数据,并从表中删除
  3. 配置SQL代理作业执行该脚本每 月1日

然而,在适当的索引,你应该确定reatian数据在原始表本身的时间要长得多 - 365天×8000名员工×2个挥笔= 584万条记录,对于SQL服务器来说不是太多。

拉吉

1

您可以创建另一个表增加一列时,特定记录的备份表插入会告诉相同Swipedaily_Tbl(11 columns)。然后,您可以创建一个脚本来备份超过一个月的数据,并从orignal表中删除该数据。然后,您可以创建批量或控制台应用程序,该应用程序可以安排在月末运行。

希望得到这个帮助。

谢谢。

2

无论是使用Partitioning Table所以在插入体积巨大的数据库表中的新数据不会影响其性能或使用脚本来每月明智的备份数据,使用SQL工作,并从现有的删除,但如果您使用的标识列,您可能需要一些改变脚本以避免旧数据和新数据发生冲突。

1

由于太常见了,这取决于。本地分区需要SQL Server的企业版,但是有一些解决方法(虽然不是很干净),比如this

如果你确实有SQL Server的企业版,我会认真考虑分区(在这里有一些其他的答案中有很好的链接),但是我不会每月分裂,也许是季度或者半年一次,因为每天两次刷卡的时间少于每月五十万行,以及1.5-3百万行。行表对于SQL服务器来说并不那么重要。

如果您在此时可能会遇到性能问题(可能有几个月的数据),您是否查看了最频繁的查询,并确保它们使用索引?