需要每10分钟从SQL Server数据库表中删除几千条记录。这是旧记录清理的一部分。
答案 0 :(得分:5)
这听起来就像SQL Server作业旨在提供的那种工作;数据库维护。
计划作业可以执行基本的T-SQL语句,该语句将删除您不想要的记录,无论您希望它运行在何种计划上。可以将作业创建脚本化为标准部署脚本的一部分,这可以抵消部署成本。
此外,通过利用SQL Server的既定部分,您可以利用其他数据库管理员的知识来理解SQL作业并能够管理它们。
答案 1 :(得分:0)
我不会使用触发器......并坚持使用SQL Server DTS或SSIS。显然你需要某种标识符,所以我会使用带索引的timestamp列...如果不需要,只需每晚触发一次TRUNCATE。
答案 2 :(得分:0)
删除的效率来自索引,与定时器的触发无关。通过范围扫描可以轻松识别“旧”记录,这一点非常重要。如果DELETE必须扫描整个表以查找这些“旧”记录,它将阻止所有其他活动。通常在这种情况下,表首先按日期时间值进行聚类,如果需要,将唯一主键委托给非聚集索引。
现在如何弹出计时器,你真的有三种选择:
SQL代理作业是10分钟间隔的最佳选择。唯一的缺点是它不适用于SQL Express部署。如果这是一个问题,那么会话计时器和activated procedures是一个可行的选择。
最后一个选项的缺点是必须运行应用程序以使计时器触发删除。如果这不是一个问题(即,如果应用程序没有运行,那么记录没有被删除并不重要)那么就可以了。请注意,ASP.Net应用程序对于这样的计时器是非常糟糕的主机,因为IIS和ASP可能选择回收并放入应用程序池中。