Sta*_*ams 4 .net sql sql-server linq-to-sql
我有一个linq查询,它根据id列(其中id = @id)从View中检索行
此查询需要4秒才能运行.我已经使用SQL Server Profiler来检查由linq执行的查询,如果我将该查询直接复制到管理工作室并执行,则查询只需要56ms.
在我的应用程序中,所有linq查询与视图的指数时间增加是一致的.当相同的查询执行<100ms时,在我的(WPF)应用程序中可能导致延长执行时间的原因是什么?
==编辑==
我已经设法进一步隔离,评论显示剖析器持续时间;
/* 3953ms, 111487 reads */
context.SkuView.Where(p => p.TermId == 35 && !p.IsDeleted).ToList();
/* 90ms, 173 reads */
context.SkuView.Where(p => p.TermId == 35).ToList();
Run Code Online (Sandbox Code Playgroud)
如果我将(sql呈现的)linq查询直接粘贴到ssms我得到;
/* 250ms, 173 reads */
SELECT * FROM SkuView WHERE TermId == 35 AND IsDeleted = 0
/* 250ms, 173 reads */
SELECT * FROM SkuView WHERE TermId == 35
Run Code Online (Sandbox Code Playgroud)
所以问题与使用时通过linq读取计数有关!p.IsDeleted ...
可能的罪魁祸首是:
在任何情况下,调查工具都可供您使用.
sys.dm_exec_requestswait_type,wait_time和wait_resource列sys.dm_exec_query_stats.要查找的内容是logical_reads和physical_reads中两种情况之间的巨大差异,表明计划完全不同(扫描与搜索),或者elapsed_time的差异,但类似的worker_time(表示阻塞,可能是锁定).| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |