Sql server 在实体框架中,可变条件的运行速度要慢得多
下面的内容非常快,我对任何此类相关问题的第一个“猜测”是参数嗅探。不,不仅仅是procs:}试着运行相同的SQL,有参数和没有参数。它是否遵循程序指示的相同性能/速度?如果您的意思是使用内联的值运行SQL查询,那么它们是的,它执行得很好。无论我以何种方式尝试,我都无法使查询在SSMS中缓慢运行。既然使用静态参数和变量参数生成相同的SQL,为什么要进行嗅探虽然这显然是发生了,但我怀疑这归结为一个可重用的缓存查询计划。当存在变量时,查询计划是相同的,即使它们得到不同的值。清除查询缓存后的第一次运行可能会很快(这是可以尝试的),即使是使用变量的表单也是如此。“ick”是指缓存的计划是在考虑了一些数据的情况下生成的——好吧,如果多样性不存在,它将被存储。在计数之前排序可以解决问题,尽管我不能说我确切地知道原因——所以我不知道它是否会爆炸……(我想它不是“相同的”)作为PS,但归根结底是对当前变量值使用一个非理想的计划。YMMV与“巧妙修改的查询”-在那里,这样做了,成功有限。)Sql server 在实体框架中,可变条件的运行速度要慢得多,sql-server,linq-to-entities,Sql Server,Linq To Entities,下面的内容非常快,我对任何此类相关问题的第一个“猜测”是参数嗅探。不,不仅仅是procs:}试着运行相同的SQL,有参数和没有参数。它是否遵循程序指示的相同性能/速度?如果您的意思是使用内联的值运行SQL查询,那么它们是的,它执行得很好。无论我以何种方式尝试,我都无法使查询在SSMS中缓慢运行。既然使用静态参数和变量参数生成相同的SQL,为什么要进行嗅探虽然这显然是发生了,但我怀疑这归结为一个可重用的缓存查询计划。当存在变量时,查询计划是相同的,即使它们得到不同的值。清除查询缓存后的第一次运行可
IQueryable<fn_GetDocumentsForContact_Result> _queriable;
var zeus = new Zeus();
var UoW = new UnitOfWork(zeus);
var sp = new StoredProcedureService(zeus);
int _userId = 183494;
int totalRecords = 0;
int doctype = 2;
var predicate = PredicateBuilder.True<fn_GetDocumentsForContact_Result>();
predicate = predicate.And(x=>x.Type == 2);
IQueryable<fn_GetDocumentsForContact_Result> documents =
sp.fn_GetDocumentsForContact(183494)
.AsExpandable()
.Where(predicate);
_queriable = documents;
_queriable.Count().Dump();
-- Region Parameters
DECLARE @ctcIDnumber Int = 183494
DECLARE @p__linq__0 Int = 2
-- EndRegion
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[fn_GetDocumentsForContact](@ctcIDnumber) AS [Extent1]
WHERE [Extent1].[Type] = @p__linq__0
) AS [GroupBy1]
predicate = predicate.And(x=>x.Type == 2);
predicate = predicate.And(x=>x.Type == doctype);