相关疑难解决方法(0)

实体框架查询速度慢,但SqlQuery中的SQL速度相同

我看到一些与使用.NET框架版本4的Entity Framework Code-First的非常简单的查询相关的一些非常奇怪的性能.LINQ2Entities查询如下所示:

 context.MyTables.Where(m => m.SomeStringProp == stringVar);
Run Code Online (Sandbox Code Playgroud)

这需要超过3000毫秒才能执行.生成的SQL看起来非常简单:

 SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp],
 ...
 FROM [MyTable] as [Extent1]
 WHERE [Extent1].[SomeStringProp] = '1234567890'
Run Code Online (Sandbox Code Playgroud)

在通过Management Studio运行时,此查询几乎立即运行.当我更改C#代码以使用SqlQuery函数时,它在5-10毫秒内运行:

 context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
Run Code Online (Sandbox Code Playgroud)

因此,完全相同的SQL,在两种情况下都会对结果实体进行更改跟踪,但两者之间存在差异.是什么赋予了?

performance entity-framework ef-code-first

83
推荐指数
3
解决办法
5万
查看次数

实体框架查询性能与原始SQL执行的extrem不同

我有一个关于Entity Framework查询执行性能的问题.

架构:

我有这样的表结构:

CREATE TABLE [dbo].[DataLogger]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [ProjectID] [bigint] NULL,
    CONSTRAINT [PrimaryKey1] PRIMARY KEY CLUSTERED ( [ID] ASC )
)

CREATE TABLE [dbo].[DCDistributionBox]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [DataLoggerID] [bigint] NOT NULL,
    CONSTRAINT [PrimaryKey2] PRIMARY KEY CLUSTERED ( [ID] ASC )
)

ALTER TABLE [dbo].[DCDistributionBox]
    ADD CONSTRAINT [FK_DCDistributionBox_DataLogger] 
    FOREIGN KEY([DataLoggerID]) REFERENCES [dbo].[DataLogger] ([ID])

CREATE TABLE [dbo].[DCString] 
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [DCDistributionBoxID] [bigint] NOT NULL,
    [CurrentMPP] [decimal](18, 2) NULL,
    CONSTRAINT [PrimaryKey3] …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework sql-server-2008 entity-framework-6

22
推荐指数
1
解决办法
9358
查看次数

使用实体框架的SQL查询运行速度较慢,使用错误的查询计划

我一般成功使用实体框架,但一个查询运行速度非常慢.查询(由EF生成)如下:

exec sp_executesql N'SELECT 
[Project1].[downtimeId] AS [downtimeId], 
CASE WHEN ([Extent12].[downtimeStart] > @p__linq__7) THEN [Extent13].[downtimeStart] ELSE @p__linq__8 END AS [C1], 
CASE WHEN ([Extent14].[equipmentID] IS NULL) THEN 0 ELSE [Extent15].[equipmentID] END AS [C2], 
CASE WHEN ([Extent16].[equipmentID] IS NULL) THEN N''Unit Overhead'' ELSE [Extent18].[equipmentCode] END AS [C3], 
CASE WHEN ( CAST( [Project1].[downtimeEquipmentStart] AS datetime2) > @p__linq__9) THEN  CAST( [Project1].[downtimeEquipmentStart] AS datetime2) ELSE @p__linq__10 END AS [C4], 
CASE WHEN ( CAST( [Project1].[downtimeEquipmentEnd] AS datetime2) < @p__linq__11) THEN  CAST( [Project1].[downtimeEquipmentEnd] AS datetime2) ELSE @p__linq__12 END …
Run Code Online (Sandbox Code Playgroud)

c# sql-server ssms entity-framework

7
推荐指数
1
解决办法
1687
查看次数

如何强制重新编译 Linq to SQL 查询的执行计划?

我有一个动态创建的 LINQ to SQL 查询。有趣的是,当我在 SQL Management Studio 中运行它时,速度非常快。当我从 L2S 运行它时,它会在一段时间后变得非常慢。

这可能是因为查询计划/执行计划。当我重新启动 SQL Server 时,L2S 查询也再次闪电般快速。

现在使用 T-SQL,您可以使用 WITH RECOMPILE。但是如何用 L2S 做到这一点呢?

sql-server linq-to-sql sql-execution-plan

3
推荐指数
1
解决办法
4344
查看次数