C# C读取Azure SQL函数的速度非常慢

C# C读取Azure SQL函数的速度非常慢,c#,azure-sql-database,C#,Azure Sql Database,这似乎很可能是某种Azure SQL问题,但我不知道发生了什么。我有一些从SQL函数读取数据的代码,如下所示: using SqlConnection myConnection = new SqlConnection(connstr); myConnection.Open(); using SqlCommand command = new SqlCommand(@"SELECT * FROM [dbo].[function] (@param)", myConnection)

这似乎很可能是某种Azure SQL问题,但我不知道发生了什么。我有一些从SQL函数读取数据的代码,如下所示:

using SqlConnection myConnection = new SqlConnection(connstr);
myConnection.Open();

using SqlCommand command = new SqlCommand(@"SELECT * FROM [dbo].[function] (@param)", myConnection);
command.Parameters.Add(new SqlParameter("@param", param));

using SqlDataAdapter da = new SqlDataAdapter(command);

DataTable dt = new DataTable();
da.Fill(dt);
我在这里使用这个函数,所以我不需要在C代码中编写非常复杂的SQL查询。当我通过SSMS运行该函数时,它会在几秒钟内运行。上周从C运行时也是如此。然而,由于某种原因,今天早上,即使在通过SSM运行时,该功能最初也非常慢,运行时间略超过2分钟。从今天早上开始,它已在SSMS中正常化,但通过C运行时超时。Azure SQL数据库的最小服务器数为0.5到最大服务器数为4 vCore。发生了什么以及如何解决此问题


编辑:我可能已经找到了解决方案。问题与SQL Server中的参数嗅探有关。我通过添加一个分配给函数参数的本地参数使函数工作,因此函数参数实际上不会在任何查询中使用。我必须看看它是否继续工作,如果它没有中断,我会将其标记为答案。

正如您所说,如果您在SQL Server中面临参数嗅探。一个查询,两个计划取决于参数,这是参数嗅探。如上所述

声明@Id INT=22656 挑选* 来自dbo.BC_ITVF@Id作为bi 去 声明@Id INT=4338144 挑选* 来自dbo.BC_ITVF@Id作为bi 去 那么我们的计划是这样的:


我们可以使用重新编译提示返回到具有文字的原始计划。

添加一个在开始时分配函数参数的本地参数,并在函数的查询中使用它可以解决问题