我有一个查询,当我使用 SSMS(2017) 和控制台应用程序执行它时需要 4 - 5 秒。
但是当我在我的控制台应用程序中使用parallel for each 运行同一个查询三次时,结果是 15 - 20 秒。
我期待的是,为什么我不能在并行运行时得到相同的结果。
见下文,我已经使用分析器检查过。查询同时开始
但是看完成时间。
这是我的代码:
int count = 3;
Stopwatch watch = new Stopwatch();
watch.Start();
Parallel.For(0, count, (index) =>
{
string queryString = "SELECT COUNT(*) AS [Row Count] FROM (SELECT SUM([dbo_MaximumData].[C1]) AS [Grid_Column_0],[dbo_MaximumData].[C3] AS [Grid_Column_2],[dbo_MaximumData].[C5] AS [Grid_Column_3],[dbo_MaximumData].[C6] AS [Grid_Column_4],[dbo_MaximumData].[C6] AS [Grid_Column_1] FROM [dbo].[MaximumData] AS [dbo_MaximumData] GROUP BY [dbo_MaximumData].[C3],[dbo_MaximumData].[C5],[dbo_MaximumData].[C6],[dbo_MaximumData].[C6] ) [Main Table] ";
string connectionString = "Server=””;Database=ODBC ANSI;User Id=sa;Password=Test@123;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
}
}
finally
{
reader.Close();
connection.Close();
}
}
});
watch.Stop();
var str = watch.Elapsed;
我的问题是“为什么并行查询执行会导致更多时间”?
任何人,请帮助我解决这个问题。提前致谢。
最佳答案
并行处理背后的想法是在系统/核心/等之间分配 cpu/内存/任何资源负载。
您在这里所做的是运行相同的查询 count
次。这会给数据库带来负担,并导致您等待,直到 count
个相同查询的实例被执行。
请注意,这个答案实际上与数据库本身几乎没有关系 - 如果您尝试在 parallel-for 中执行任何非分布式算法,结果都是一样的。
关于c# - 并行执行查询会导致更多时间 [SQL Server],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52815405/