SQL Server 2008——并行执行查询
本文关键字:并行执行 查询 2008 Server SQL | 更新日期: 2023-09-27 18:14:05
是否有一种简单的方法来并行执行查询?我有一个类似这样的查询:
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<SqlCommand>();
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<string> list;
list.Add("query1");
list.Add("query2");
list.AsParallel().ForAll(query => ExecuteQuery(query));
使用SSIS。将3 Execute sql任务放在控制流上。为每个任务添加一条delete语句。当包执行时,它们将同时执行。
您也可以为每条语句创建一个作业,并安排它们同时运行。
异步回调也可以工作,但上面的2对于具有dba技能的人来说更容易实现和管理。