c# - 并行执行查询会导致更多时间 [SQL Server]

标签 c# sql sql-server performance parallel.foreach

我有一个查询,当我使用 SSMS(2017) 和控制台应用程序执行它时需要 4 - 5 秒。

但是当我在我的控制台应用程序中使用parallel for each 运行同一个查询三次时,结果是 15 - 20 秒。

我期待的是,为什么我不能在并行运行时得到相同的结果。

见下文,我已经使用分析器检查过。查询同时开始

enter image description here

但是看完成时间。

enter image description here

这是我的代码:

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/

相关文章:

sql-server - 如果我无权访问所有数据库,SSMS 2008 中的对象浏览器将不起作用

c# - ItemDataBound 未触发

c# - 在非托管 C++ 程序中实现 C# DLL COM 文件

c# - 如何使用自动增量列将集合保存为用户定义的数据类型?

mysql - phpmyadmin - sql 查询错误

sql-server - SQL_Latin1_General_CP1_CI_AS 中的 Z 之后是什么?

c# - 如果我以 dd-MM-yyyy 格式传递日期,则将 yyyy-MM-dd 格式的日期保存到 SQL Server 2008

c# - 如何创建 resx 文件

c# - 我收到错误 "There is no ViewData item of type ' IEnumerable<SelectListItem>'

c# - 最佳实践?打开和关闭多连接,或 ado.net 的一个大打开连接