有沒有簡單的方法可以並行執行查詢?我有一個類似這樣的查詢:SQL Server 2008 - 並行執行查詢
delete from TableA where id = @id
delete from TableB where id = @id
delete from TableC where id = @id
...
我想並行地做它們。我也可以使用C#,但不知道如何。
有沒有簡單的方法可以並行執行查詢?我有一個類似這樣的查詢: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<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();
}
使用SSIS。 Put 3在控制流上執行sql任務。爲每個任務添加一條刪除語句。當程序包執行時,它們都將同時執行。
您也可以爲每個語句創建一個作業,並安排它們全部同時運行。
異步回調也可以工作,但上述2對於具有dba技能組的人來說更容易實現和管理。
List<string> list;
list.Add("query1");
list.Add("query2");
list.AsParallel().ForAll(query => ExecuteQuery(query));
請注意,如果這些表之間存在外鍵關係,那麼它們可能不如您想像的那麼高效。 –
雅,所有這些表是獨立的,除了主表,我會最後做。 – Timmy
它真的是一個性能問題,值得並行處理的代碼複雜化從三個表中刪除一些id的行? – bryanmac