如何NOLOCK在Entity Framework上使用该功能?XML是唯一的方法吗?
对于针对SQL Server 2008 R2运行的实体框架(4.2)生成的简单SQL查询,我遇到了一些主要的性能问题.在某些情况下(但不是全部),EF使用以下语法:
exec sp_executesql 'DYNAMIC-SQL-QUERY-HERE', @param1...
Run Code Online (Sandbox Code Playgroud)
在其他情况下,只需执行原始SQL,并将提供的参数烘焙到查询中.我遇到的问题是使用sp_executesql执行的查询忽略了目标表上的所有索引,导致执行查询极差(通过检查SSMS中的执行计划来确认).
经过一些研究,听起来这个问题可能是由"参数嗅探"造成的.如果我附加OPTION(RECOMPILE)查询提示,如下所示:
exec sp_executesql 'DYNAMIC-SQL-QUERY-HERE OPTION(RECOMPILE)', @param1...
Run Code Online (Sandbox Code Playgroud)
使用目标表上的索引,并且查询执行速度非常快.我还尝试在数据库实例(http://support.microsoft.com/kb/980653)上切换用于禁用参数嗅探(4136)的跟踪标志,但是这似乎没有任何效果.
这给我留下了一些问题:
附加信息:
我还要提一下,如果我通过服务管理控制台重新启动SQL Server服务,在使用下面的脚本启用跟踪标志4136后,实际上似乎清除了跟踪标志...也许我应该以不同的方式这样做......
DBCC TRACEON(4136,-1)
Run Code Online (Sandbox Code Playgroud) entity-framework parameter-sniffing sql-server-2008-r2 sp-executesql
我正在从实体框架调用一个表值函数,并且需要能够添加option (recompile)它,因为它拾取的执行计划不是最佳的.在SQL Server Management Studio中运行查询,它看起来像这样:
select
*
from dbo.fDE_myquery(0, 0, 3309, '7/1/2013', '7/1/2014', 0, 0)
option (recompile)
Run Code Online (Sandbox Code Playgroud)
来自EF,没有办法添加这个提示,AFAIK.EF部分看起来像:
var query = from f in ctx.fDE_myQuery(aBool, anotherBool, StartDate,
EndDate, someInt, moreBool)
select f;
Run Code Online (Sandbox Code Playgroud)
我看到了这个问题:
但它已经过时了,所接受的解决方案并没有提供足够的信息来说明如何使用实体框架实际实施建议的解决方案(使用计划指南).如果这是唯一的解决方案,那么如何让实体框架使用计划指南呢?
select * from table1 with(index=IX_table1_1)
Run Code Online (Sandbox Code Playgroud)
Linq to sql使用ado.net实体想写上面的代码.我特别找不到实体,使用索引.
var querysample = from a in db.table1
select a;
Run Code Online (Sandbox Code Playgroud) 我们正在评估EF4,我的DBA说我们必须在所有SELECT语句中使用NOLOCK提示.所以我正在研究如何在使用EF4时实现这一点.
我已经阅读了关于如何在EF4中实现这一点的不同想法,但所有这些似乎都是一种解决方案而不是微软或EF4批准的.在使用LINQ-to-SQL/LINQ-to-Entities和EF4时,希望他们的SELECT语句包含NOLOCK提示的人的"官方Microsoft"响应是什么?
顺便说一下,我发现的绝对最好的信息就在这里,我鼓励每个对这个主题感兴趣的人阅读这个主题.
谢谢.
我有一个SQL数据库查询的问题突然(但通常大约每三周)变得缓慢.
安装程序如下:
Orders查询主要选择的表()有大约24000条记录,其他五条连接表小(100条或更少)Orders有一个包含二进制数据(PDF文档)的varbinary(MAX)列Report,平均大小约为200到300 kB(但有时可能高达2 MB).这24000个订单中超过90%的列填充了此列,其他的则是NULL,即6 GB数据库大小的90%以上是二进制数据.有问题的查询具有以下结构:
SELECT TOP (30) [Project2].[OrderID] AS [OrderID]
-- around 20 columns more
FROM ( SELECT [Project2].[OrderID] AS [OrderID],
-- around 20 columns more
row_number() OVER (ORDER BY [Project2].[OrderID] ASC) AS [row_number]
FROM ( SELECT [Filter1].[OrderID] AS [OrderID]
-- around 20 columns more
FROM ( SELECT [Extent1].[OrderID] AS [OrderID]
-- around …Run Code Online (Sandbox Code Playgroud)