SQL Server 2008 – 并行执行查询

有一种简单的方法可以并行执行查询吗? 我有一个类似这样的查询:

delete from TableA where id = @id delete from TableB where id = @id delete from TableC where id = @id ... 

我想并行完成它们。 我也可以使用C#,但不知道如何。

第一个想法是使用单独的线程和单独的连接,但我认为您可以使用异步回调在单个线程中使用多个连接来管理它:

 string[] tables = new string[] { "TableA", "TableB", "TableC" ... }; var runningCommands = new List(); foreach(var table in tables) { var conn = new SqlConnection(...); conn.Open(); var cmd = new SqlCommand("DELETE FROM " + table + " WHERE id = @id"); cmd.Parameters.Add(new SqlParameter("@id", id); cmd.BeginExecuteNonQuery(); runningCommands.Add(cmd); } // now wait for all of them to finish executing foreach(var cmd in runningCommands) { cmd.EndExecuteNonQuery(); cmd.Connection.Close(); } 
  List list; list.Add("query1"); list.Add("query2"); list.AsParallel().ForAll(query => ExecuteQuery(query)); 

使用SSIS。 将3执行sql任务放在控制流上。 为每个任务添加一个删除语句。 包执行时,它们将同时执行。

您还可以为每个语句创建一个作业,并将它们安排在同一时间运行。

异步回调也可以,但上面的2对于具有dba技能组的人来说更容易实现和管理。