如何防止实体框架在 SQL Server 中生成低效查询?

2023-12-14

我在 EF 4.0 中定义了一个基于视图的实体。该视图位于一个包含大约 1800 万行数据的表上。我选择了实体的 4 个确定性属性作为该实体的复合实体键。我已通过 OData WCF 数据服务公开了对包含此视图的模型的访问。 WCF 数据服务设置为限制结果,如下所示

config.SetEntitySetPageSize("*", 100)

当我对此视图进行基本查询时:

var fcbs = this.iBenchmarkCostContext.FtCostBenchmarks.ToArray();

这是我在分析工具中看到的查询:

SELECT TOP (100) [Extent1].[MonthBeginDt]                     AS [MonthBeginDt],
                 [Extent1].[dmCostBenchmarkKey]               AS [dmCostBenchmarkKey],
                 [Extent1].[dmProductKey]                     AS [dmProductKey],
                 [Extent1].[IsImputedFlg]                     AS [IsImputedFlg],
                 [Extent1].[ProjectedCopayPerRxAmt]           AS [ProjectedCopayPerRxAmt],
                 [Extent1].[ProjectedPricePerQtyAmt]          AS [ProjectedPricePerQtyAmt],
                 [Extent1].[ProjectedQtyPerRxQty]             AS [ProjectedQtyPerRxQty],
                 [Extent1].[ProjectedRxCnt]                   AS [ProjectedRxCnt],
                 [Extent1].[AvgPriceRxAvgPriceQtyDenominator] AS [AvgPriceRxAvgPriceQtyDenominator],
                 [Extent1].[AvgQtyDenominator]                AS [AvgQtyDenominator],
                 [Extent1].[AvgCopayDenominator]              AS [AvgCopayDenominator],
                 [Extent1].[ProjectedTotalCostAmt]            AS [ProjectedTotalCostAmt],
                 [Extent1].[AllowedRxCnt]                     AS [AllowedRxCnt],
                 [Extent1].[CopayRxCnt]                       AS [CopayRxCnt],
                 [Extent1].[TotalAllowedAmt]                  AS [TotalAllowedAmt],
                 [Extent1].[TotalCopayAmt]                    AS [TotalCopayAmt],
                 [Extent1].[TotalCostPerUnitAmt]              AS [TotalCostPerUnitAmt],
                 [Extent1].[TotalUnitQty]                     AS [TotalUnitQty],
                 [Extent1].[RC]                               AS [RC]
FROM   (SELECT [ftCostBenchmark].[MonthBeginDt]                     AS [MonthBeginDt],
               [ftCostBenchmark].[dmCostBenchmarkKey]               AS [dmCostBenchmarkKey],
               [ftCostBenchmark].[dmProductKey]                     AS [dmProductKey],
               [ftCostBenchmark].[IsImputedFlg]                     AS [IsImputedFlg],
               [ftCostBenchmark].[ProjectedCopayPerRxAmt]           AS [ProjectedCopayPerRxAmt],
               [ftCostBenchmark].[ProjectedPricePerQtyAmt]          AS [ProjectedPricePerQtyAmt],
               [ftCostBenchmark].[ProjectedQtyPerRxQty]             AS [ProjectedQtyPerRxQty],
               [ftCostBenchmark].[ProjectedRxCnt]                   AS [ProjectedRxCnt],
               [ftCostBenchmark].[AvgPriceRxAvgPriceQtyDenominator] AS [AvgPriceRxAvgPriceQtyDenominator],
               [ftCostBenchmark].[AvgQtyDenominator]                AS [AvgQtyDenominator],
               [ftCostBenchmark].[AvgCopayDenominator]              AS [AvgCopayDenominator],
               [ftCostBenchmark].[ProjectedTotalCostAmt]            AS [ProjectedTotalCostAmt],
               [ftCostBenchmark].[AllowedRxCnt]                     AS [AllowedRxCnt],
               [ftCostBenchmark].[CopayRxCnt]                       AS [CopayRxCnt],
               [ftCostBenchmark].[TotalAllowedAmt]                  AS [TotalAllowedAmt],
               [ftCostBenchmark].[TotalCopayAmt]                    AS [TotalCopayAmt],
               [ftCostBenchmark].[TotalCostPerUnitAmt]              AS [TotalCostPerUnitAmt],
               [ftCostBenchmark].[TotalUnitQty]                     AS [TotalUnitQty],
               [ftCostBenchmark].[RC]                               AS [RC]
        FROM   [dbo].[ftCostBenchmark] AS [ftCostBenchmark]) AS [Extent1]
ORDER  BY [Extent1].[MonthBeginDt] ASC,
          [Extent1].[dmCostBenchmarkKey] ASC,
          [Extent1].[dmProductKey] ASC,
          [Extent1].[IsImputedFlg] ASC

尽管我没有明确请求任何排序,但添加了一个 order by 子句,其中包括为实体定义的复合实体键中包含的字段。执行此查询需要花费大量时间并在数据库上生成页锁。去除ORDER BY从 SQL Server 环境中的查询将在不到一毫秒的时间内返回结果。

所以我的问题是:

如何阻止 EF 将 order by 子句添加到查询中?


如果不指定顺序,行限制没有任何意义。

如果要按存储顺序检索记录,请创建聚集索引并在查询中显式指定它。

一种方法是使用查询拦截器.

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

如何防止实体框架在 SQL Server 中生成低效查询? 的相关文章

随机推荐

  • JQplot 在 IE 上的打印问题

    我正在尝试打印我的图表 它可以通过 Firefox 和 Chrome 正确打印 但如果我尝试用 IE 打印它 它会向我显示图表后面的图表画布 HTML 标签 正如你在图片中看到的那样 并且它还将图表轴文本放置在整个图表上 我尝试了下面的解决
  • 如何在C#中处理枚举0(CA1008讨论)

    Rule CA1008指定所有枚举都应该有一个0应该命名的值Unknown 我们不在这里讨论标志 我理解您想要防止未初始化的值自动获得含义的原因 假设我定义以下枚举 enum Gender Male Female class Person
  • 在反应中从另一个钩子调用钩子

    我对反应还很陌生 并试图简化一些开发 我有这个自定义挂钩useApi import useState from react import PetsApiFactory from petstore axios api import useKe
  • 每次调用方法时创建对象的新实例

    Messenger Default Register
  • ASP.net - 按钮 - Javascript 确认对话框 - 执行一些服务器端代码?

    我有一个简单的 ASP net 页面 用户可以在其中编辑有关自己的信息 单击 编辑 按钮时 表单进入编辑模式 并显示 保存 和 取消 按钮 其行为符合预期 我想做的是这样的 单击 保存 后 将显示一个 Javascript 确认对话框 询问
  • 对“DTLS_client_method”的未定义引用

    我目前正在尝试在 android 上实现 DTLS 以加密 UDP 数据报 为此 我构建了 openssl android 项目可以在这里找到 由此我得到了两个共享库 libssl so 和 libcrypto so 我将它们重命名为 li
  • Boost是如何实现这样的语法的呢?

    http www boost org doc libs 1 58 0 doc html program options tutorial html Declare the supported options desc add options
  • 从字符串中提取图像 src

    我试图将所有图像元素匹配为字符串 这是我的正则表达式 html match
  • 将闪亮与facet_grid结合起来

    我正在开展一个学校项目 其中有一些 dyplr 查询 我需要使用 Shiny 库使它们交互 现在我在 dyplr 中有一个查询 在那里我可以看到印度外卖餐厅每个国家的收入 我有以下查询 df gt group by Origin Jaar
  • Node 提供的 ejs 文件可以使用离线引导吗?

    我是节点和全栈开发的新手 希望我正确地提出这个问题 而不是粗心或冒犯您的特定理解水平 我的开发环境已连接互联网 但生产环境不会连接 我想将 bootstrap css 与节点一起使用 Apache httpd 不是生产环境中的一个选项 本地
  • 使用 MySQL Connector for .net 打开 MySQL 连接非常慢

    我正在尝试解决使用 MySQL Connector for net 打开连接时 MySQL 响应时间过长的问题 我已经使用 skip name resolve 安装了在 Azure VM Server 2008 上运行的 MySQL 5 5
  • 查找每个部门的最高薪水 - 是否有更有效的查询?

    我有一个有效的查询 但我怀疑我这样做效率低下 是否有更优雅的方法来查找每个部门的最高薪水以及赚取该薪水的员工 我正在做一个 cte 来查找每个部门 ID 的最高工资 然后通过匹配工资和部门 ID 将其与员工数据结合起来 我有下面的代码来构建
  • Slick2D 矩形碰撞检测

    我遇到一个问题 显示一个矩形与另一个矩形发生碰撞 所以我的问题是 如何获得相交方法来检查碰撞 或者说有其他方法来处理这种情况下的碰撞吗 我正在创建一款回合制战斗游戏 类似于 最终幻想 或 龙骑兵传奇 其中玩家的角色位于屏幕的右侧 敌人位于屏
  • 当我执行“git diff”时,如何获得并排差异?

    当我打字时git diff 我想看到并排的差异 就像diff y 或者喜欢在交互式差异工具中显示差异 例如kdiff3 如何才能做到这一点 尝试 git difftool Use git difftool代替git diff 你永远不会回去
  • MYSQL REGEXP 在 JSON 字符串中搜索

    我是 regexp 的初学者 我尝试在 json 格式的文本中搜索 但我无法使其正常工作 SELECT DISTINCT tag body FROM pages WHERE body REGEXP BINARY listeListeOuiN
  • 动态绘图在 IDLE 中有效,但在 Jupyter Notebook 中无效

    下面的代码在空闲状态下运行时工作正常 Python 3 6 空闲状态 import matplotlib pyplot as plt import time import random matplotlib inline ysample r
  • 让柱形图在图表控件中重叠

    我有以下问题 我需要在图表控件中显示多个列 一个图表区域中大约有七个系列 现在 当我有一个 列 类型的图表时 所有七列都会并排显示 我想做的就是将它们重叠 这可能吗 以下两个解决方案对我没有帮助 绘制重叠柱形图或条形图 图表控制两个数据集条
  • 当前无法从软件更新服务器获取 Xcode

    更新到 OS X 10 9 后 我的 macport 出现问题 我尝试遵循本手册https trac macports org wiki Migration修复它们 但是当我安装命令行工具时 xcode 选择 安装 我收到消息 无法安装该软
  • Keras 卷积层维数不匹配

    我正在尝试使用 Keras 来构建我的第一个神经网络 我的经验为零 我似乎无法弄清楚为什么我的维度不正确 我无法从他们的文档中弄清楚这个错误在抱怨什么 甚至是哪个层导致了它 我的模型接受 32 字节的数字数组 并应该在另一侧给出一个布尔值
  • 如何防止实体框架在 SQL Server 中生成低效查询?

    我在 EF 4 0 中定义了一个基于视图的实体 该视图位于一个包含大约 1800 万行数据的表上 我选择了实体的 4 个确定性属性作为该实体的复合实体键 我已通过 OData WCF 数据服务公开了对包含此视图的模型的访问 WCF 数据服务