为什么实体框架会生成缓慢的过度设计的 SQL?

2023-12-03

我有这个代码:

DbSet<TableName> table = ...// stored reference

var items = from n in table where
            n.Name.ToUpper().Contains(searchString.ToUpper().Trim())
            select n;
WriteToLog( items.ToString() );

最后一行输出生成的 SQL。这是我得到的:

SELECT 
    [Extent1].[Name] AS [Name],
    // all the other columns follow
FROM (SELECT 
  [TableName].[Name] AS [Name],
  // all the other columns follow
FROM [dbo].[TableName] AS [TableName]) AS [Extent1]
WHERE ( CAST(CHARINDEX(LTRIM(RTRIM(UPPER(@p__linq__0))), UPPER([Extent1].[Name])) AS int)) > 0

你看,有SELECT-from-SELECT虽然它完全是多余的 - 一SELECT就足够了。尽管表相当小,但使用 EF 的代码运行时间超过半分钟,并且该查询超时。

为什么会生成这个过度设计的 SQL 查询以及如何使 EF 生成更好的查询?


它通过转换表达式树生成结果 SQL。它似乎是过度设计的(例如,使用子查询),这是它完成转换的方式的副作用。 转换的细节是专有的且复杂的,并且结果不应该是人类可读的。

这个问题并不完全清楚 - 你正在试图解决一个我认为可能不是问题的问题。尝试将生成的查询与您自己的查询进行比较 - 我猜查询优化器将很快完成如此简单的优化。

我的猜测(这可能是您可以在这里得到的最好的答案,除非 LINQ to Entities MS 开发人员出现)是他们正在这样做:生成最有效的查询,但留下了令人头疼的困难工作将查询优化到他们已经投入数百或数千个工日的程度:SQL Server 中的查询优化器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么实体框架会生成缓慢的过度设计的 SQL? 的相关文章

  • 如何使用外连接和分组依据在查询中包含 NULL 值

    我有两个表 其中包含以下示例数据 Table 1 item name item id item desc 1 apple 2 orange 3 banana 4 grape 5 mango Table 2 user items user i
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 应用新设置时如何防止 GraphicsDevice 被丢弃?

    我的游戏窗口允许手动调整大小 这意味着它可以像任何其他普通窗口一样通过拖动其边缘来调整大小 游戏还利用了RenderTarget2D rt2d 在主 Draw 方法中设置主渲染目标 GraphicsDevice SetRenderTarge
  • += 运算符在 C++ 中是如何实现的?

    这是我一直在思考的一个问题 但从未找到任何资源来说明这个问题的答案 事实上它不仅是为了 也适用于它的兄弟姐妹 即 等等 当然不是 考虑这个例子 int a 5 a 4 this will make a 9 现在考虑等效表达式 a a 4 T
  • 从 SQL Server 中的子查询值或其他聚合函数获取平均值

    我有 SQL 语句 SQL Server SELECT COUNT ActionName AS pageCount FROM tbl 22 Benchmark WHERE DATEPART dw CreationDate gt 1 AND
  • 使用 catch all 字典属性将 json 序列化为对象

    我想使用 JSON net 反序列化为对象 但将未映射的属性放入字典属性中 是否可以 例如给定 json one 1 two 2 three 3 和 C 类 public class Mapped public int One get se
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • Oracle中如何选择前100行?

    我的要求是获取每个客户的最新订单 然后获取前100条记录 我编写了一个如下查询来获取每个客户的最新订单 内部查询工作正常 但我不知道如何根据结果获得前 100 名 SELECT FROM SELECT id client id ROW NU
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • 如何在线程和 GUI 之间进行通信

    目前我使用 Kotlin 和 Java 开发桌面应用程序 GUI 是使用 JavaFX 制作的 我有几个基本的 UDP 服务器 Kotlin 线程 监听不同的端口以通过网络接收数据 连接工作正常 我可以想到几种 或多或少复杂的 线程和 GU
  • AngularJS 和 Redactor 插件

    所以我正在 AngularJS 中开发一个新网站 并且非常喜欢它 然而 我遇到了一个问题 我正在尝试向我的文本区域添加一个名为 Redactor 的 jQuery 插件 但我认为当我初始化该插件时 它会替换文本区域元素 这是有问题的原因是因
  • Cloudfront使用ssl将www重定向到裸域[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 如果之前有人问过这个问题 请原谅我 有很多资源涉及到这个问题 但似乎没有什么适合我的特定 https 用例 我正在尝试重定向https www example com to http
  • 如何在特定位置显示自定义对话框?

    我有一个按钮 单击它会弹出一个对话框 该对话框显示在中心 但我想将它显示在按钮下方 如何做到这一点 我也尝试使用弹出窗口 这是代码 private void showPopup final Activity context Point p
  • docker 映像标识符是否可用于该 docker 内运行的进程?

    对于我的日志 我想包含 docker 映像标识符 这样我以后就可以将外部日志与生成它们的映像重新协调 有没有办法让 Docker 内部的进程获取它正在运行的图像标识符 也许是一个 dev or proc file 在 OCI 中以及之前在
  • Jetty:Spring 5 运行失败并出现 NoSuchMethodError

    我正在尝试将我的网络应用程序更新到当前的库 当我将 Spring 从 3 1 1 升级到 5 0 0 时 它开始失败 java lang NoSuchMethodError javax servlet http HttpServletRes
  • 使用 NavigationDrawer 在 Fragments 和 MapFragment 之间切换 *已修复*

    问题解决了 进一步向下滚动 我目前正在编写一个带有导航抽屉的应用程序 我想要其中一个片段中的地图 要在导航抽屉中的片段之间切换 我有这个 Switch 案例 private void displayView int position upd
  • 在类内部定义一个const静态对象变量

    我需要在类定义中创建一个静态对象 在 Java 中这是可能的 但在 C 中我得到一个错误 PlaceID h 9 43 error invalid use of incomplete type class PlaceID PlaceID h
  • 一次访问 numpy 数组中的块

    提供了一个 numpy 数组 arr np array 0 1 2 3 4 5 6 7 8 9 10 11 12 我想知道如何访问选择的大小chunks选择分离 连接和切片 例如 获取由两个值分隔的大小为 3 的块 arr chunk 3
  • 数据库更改时自动通知:类似于 facebook 好友请求

    我希望开发一个基于 php mysql 的社交网站 注册用户可以选择将其他用户添加为好友 就像在 Facebook 中所做的那样 如果用户 A 点击用户 B 个人资料上的 添加好友 链接 好友请求记录将相应地在 A 和 B 的数据库中创建
  • 如何使用 C# 将 PDF 转换为 HTML [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我必须阅读 pdf 并创建 html 文档 用于在我的网站上上传的简历 我无法使用任何共
  • Symfony2 和 date_default_timezone_get() - 依赖系统的时区设置是不安全的

    我有一个 Symfony2 项目 我今天将 php 更新到 5 5 7 从那时起 我得到了 Warning date default timezone get It is not safe to rely on the system s t
  • 如何关闭 X 按钮的可见性并禁用 alt + F4 功能

    有人可以告诉我如何将主应用程序窗口中的 X 按钮设置为 false 以及如何将 Alt F4 功能设置为不可用或只是禁用它吗 Update 我将其添加到 public ZalumView SingleFrameApplication app
  • 在 App Delegate 中管理两个故事板

    我决定避免使用自动布局 因此我目前正在尝试实现代码 以使我的应用程序根据屏幕尺寸管理两个不同的故事板 我一直在关注这个教程 http pinkstone co uk how to load a Different storyboard de
  • 将类的 Nullable 双属性序列化为 Xml 文本

    我必须使用以下代码进行序列化 using System using System Collections Generic using System Linq using System Text using System IO using S
  • Python中抽象类和接口的区别

    Python中抽象类和接口有什么区别 有时您会看到以下内容 class Abstract1 Some description that tells you it s abstract often listing the methods yo
  • NetBeans 中的 GroupLayout 自动生成的代码

    在进行了近 4 年的 Java 编程之后 我决定学习如何自己编写 GUI 类 因为直到现在我一直使用 NetBeans GUI 编辑器 我并不为它感到特别自豪 但它运行得很好 避免了我担心组件 布局 问题是我正在关注如何使用GroupLay
  • 如何在 python (numpy) 中更快地计算每行两个矩阵 A 和 B 的外积?

    假设我们有两个矩阵 A 和 B A 具有形状 r k B 具有形状 r l 现在我想计算每行这两个矩阵的 np outer 乘积 在外积之后 我想对轴 0 中的所有值求和 所以我的结果矩阵应该具有形状 k l 例如 A的形式是 4 2 B的
  • 屏蔽字符串的一部分

    所以我的问题是 我有一项任务需要解决 我有一个简单的功能 def multiplicator x y var1 x y return var1 我需要使用这个乘法器在另一个函数中得到这个结果 Enter 5435843398429829 o
  • 为什么实体框架会生成缓慢的过度设计的 SQL?

    我有这个代码 DbSet