当前位置:  开发笔记 > 编程语言 > 正文

为什么使用Take()似乎可以加速我的EF查询?

如何解决《为什么使用Take()似乎可以加速我的EF查询?》经验,为你挑选了1个好方法。

我有一个复杂的LINQ到EF查询超时.在调试时我添加了一个Take(200)并没有超时.奇怪的是它只返回了127行!

换句话说,即使它没有改变结果Take,也要添加加速查询.有什么可能导致这种情况?

为了澄清,生成的SQL完全相同,只是将Take(200)EF添加TOP 200SELECT.



1> Olivier Jaco..:

我的猜测是这个改变导致数据库选择另一个查询计划.作为DB new,最多返回200条记录,它选择了一种更适合返回少量记录的算法(200对于DB来说很小).

例如,使用索引并不总能加快查询速度.如果你有少于(非常大约)1000条记录,所涉及的开销实际上可能会减慢查询速度.也许数据库选择了一个简单的表扫描,而不是之前使用的更复杂的查询计划.

如果您想确切知道发生了什么,您将不得不使用数据库提供的工具来分析这两种变体的查询计划.不幸的是,这些查询计划并不容易理解,因为它们需要相当深入的数据库知识.

在Microsoft SQL Server Management Studio中,您可以从查询窗口调用菜单Query > Display Esimated Execution Plan.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有