0

在我的应用程序中,我有一个Employee Swipedaily_Tbl包含 11 列的 SQL Server 2008 表,其中插入了员工每日滑动。

我的公司有大约 8000 名员工。这意味着每天将至少创建 16000 行。

我打算在月底删除所有行并将它们保存到另一个表中以提高性能......或由应用程序本身将上个月的数据备份为 dmb 文件

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

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

4

5 回答 5

2

要么使用分区表,因此在大容量数据库表中插入新数据不会影响其性能,要么使用脚本每月使用 SQL 作业备份数据并从现有数据中删除,但如果您使用的是标识列,则可能需要对脚本进行一些更改避免新旧数据冲突。

于 2013-01-08T11:39:31.040 回答
1
  1. 创建一个相同的表
  2. 创建一个 SQL 脚本,将所有早于给定日期(比如今天的日期)的数据复制到该表并从表中删除
  3. 配置 SQL 代理作业以在每月 1 日执行该脚本

但是,通过适当的索引,您应该可以将原始表本身中的数据重新计算更长的时间 - 365 天 x 8000 名员工 x 2 次滑动 = 584 万条记录,对于 SQL Server 来说处理不了太多。

拉吉

于 2013-01-08T11:16:34.973 回答
1

您可以创建另一个Swipedaily_Tbl(11 columns)与其他列相同的表,该列将告诉您何时将特定记录插入到备份表中。然后,您可以创建一个脚本来备份超过一个月的数据并从原始表中删除该数据。然后,您可以创建可以安排在月底运行的批处理或控制台应用程序。

希望这有帮助。

谢谢。

于 2013-01-08T11:20:49.407 回答
1

这将取决于您对“旧”数据的要求。就个人而言,我强烈考虑使用表分区。请参阅:http ://technet.microsoft.com/en-us/library/dd578580(v=sql.100).aspx

将所有记录保存在表格中;这将使同时查看当前和历史数据的查询更简单,并且可能更便宜。

于 2013-01-08T11:21:39.433 回答
1

通常情况下,这取决于。本机分区需要 SQL Server 企业版,但是有一些方法可以绕过它(虽然不是很干净),比如.

如果您确实有 SQL Server 的企业版,我会认真考虑分区(在此处的其他一些答案中有很好的链接),但是我不会按月拆分,可能会按季度或半年拆分,因为每天两次滑动少于每月一百万行,以及 1.5-3 百万。行表对于 SQL Server 来说并不能处理那么多。

如果您此时遇到性能问题,可能有几个月的数据,您是否检查过最常访问表的查询并确保它们使用索引?

于 2013-01-08T16:39:22.800 回答