使用 where 子句的慢查询

2024-04-06

我有以下 sql 查询,只需 1 秒即可执行:

select a.date, b.rate, c.type, a.value from

a inner join b on a.id = b.aid
c inner join b.id = c.bid
where a.name = 'xxx'

但我需要一个结果集来获取速率大于 0 的结果。因此,当我将查询更改为此时,执行需要 7 分钟:

select a.date, b.rate, c.type, a.value from

a inner join b on a.id = b.aid
c inner join b.id = c.bid
where a.name = 'xxx' and b.rate>0

为什么这会使查询时间从 1 秒增加到 7 分钟?由于 b 表很大,我什至尝试使用 CTE,但这也没有提高性能。我认为使用 CTE 将会有更小的值集可供过滤,因此它应该更快,但这没有帮助:

;with x as
(select a.date, b.rate, c.type, a.value from

a inner join b on a.id = b.aid
c inner join b.id = c.bid
where a.name = 'xxx')
select * from x where rate>0

我无法包含执行计划,因为除了查询之外我没有数据库权限。


我的猜测是缓慢的执行计划正在做rate>0以一种不幸的方式进行过滤,例如作为循环连接内部扫描的一部分或其他内容。

如果归根结底,一种解决方案是存储中间结果集并在单独的语句中对其进行过滤。

我建议这样做的前提是您无法更改供应商的数据库并且您基本上陷入困境。这本质上是剥夺了优化器的一些控制权——这是您通常不想做的事情——并且还通过创建临时表增加了相对少量的开销。但它应该可以缓解这种情况下的缓慢情况。如果可能的话,我将继续与您的供应商合作制定索引策略。

select a.date, b.rate, c.type, a.value 
into #t
from a inner join b on a.id = b.aid
c inner join b.id = c.bid
where a.name = 'xxx' 

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

使用 where 子句的慢查询 的相关文章

  • TransactionScope 是否需要开启 DTC 服务?

    根据我的阅读 为了在 NET 中使用 TransactionScope 您需要运行 Windows 中的分布式事务协调器服务 我有那个服务关掉 并且我的应用程序似乎运行相同并且回滚事务没有问题 我错过了什么吗 它如何能够发挥作用呢 我正在运
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • 默认情况下在sql日期时间列中插入null/空值

    如何在 SQL Server 中创建一个表 默认日期时间为空 而不是1900 01 01 00 00 00 000我得到了 我的意思是 如果没有插入值 则默认值应该为 null 空等 如果没有插入值 默认值应该是null empty 在表定
  • Oracle SQL PLS-00049:错误的绑定变量

    我收到此错误 这似乎是列拼写问题 然而 我 99 确信我拼写的所有内容都是正确的 但我看不出有任何理由会出现我所犯的错误 这是来源 CREATE OR REPLACE TRIGGER update qoh trigger AFTER INS
  • SQL存储过程执行时间差异

    我在 win form 应用程序中遇到奇怪的问题 我正在调用一个存储过程 并且执行大约需要 6 秒 此存储过程接受多个参数 包括一个输出参数 从应用程序级别我使用 Dim dt1 DateTime Now cmd ExecuteNonQue
  • SQL Server 文件操作?

    使用 SQL Server 2005 如何使用 T SQL 将文件读入 SPROC 所以 假设我有一个像这样的 CSV 文件 ID OtherUselessData 1 asdf 2 asdf 3 asdf etc 我基本上想这样做 Sel
  • ADO.NET SQLServer:如何防止关闭的连接持有S-DB锁?

    i Dispose http msdn microsoft com en us library system data sqlclient sqlconnection close aspx一个 SqlConnection 对象 但是当然它并
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 为什么 ISNUMERIC('.') 返回 1?

    最近我在 SQL Server 中使用 ISNUMERIC 时遇到了一个问题 导致找到了这段代码 SELECT ISNUMERIC 这会返回 1 如 true 所示 难道不应该像 false 一样返回 0 吗 See Numeric 损坏了
  • 处理ON INSERT触发器时,innodb表如何锁定?

    我有两个 innodb 表 articles id title sum votes 1 art 1 5 2 art 2 8 3 art 3 35 votes id article id vote 1 1 1 2 1 2 3 1 2 4 2
  • SQL Server - 选择满足条件的第一行

    我有 2 个包含 ID 的表 其中一个表中会有重复的 ID 我只想为表 B 中的每个匹配 ID 返回一行 例如 Table A objectIdA objectIdB 1 A 1 B 1 D 5 F Table B objectIdA 1
  • 将用户定义的表类型从 VBA 传递到 SQL

    我的任务是创建一个 Excel 电子表格作为 SQL 数据库的前端 以及一些对数据执行复杂计算的 C 我的老板想要前端作为电子表格 而计算对于 VBA 来说似乎太复杂了 目前 检索数据集的存储过程运行良好 然后 用户将在 Excel 中编辑
  • 复杂的sql树行

    表结构 id message reply id 1 help me 0 434 love to 1 852 didn t work 434 0110 try this 852 2200 this wont 0 5465 done 0110
  • 一张表中按最大日期过滤重复行的 SQL 查询

    我有一个 SQL 数据库 persons 它具有基于 IDNum 列的重复条目 我需要查询条目并仅根据最新创建日期显示行或重复条目 这是查询 SELECT IDNum PersonPGUID CreatedDateTime FirstNam
  • PostgreSQL 和锁定

    希望一些比我更聪明的 DBA 可以帮助我找到一个好的解决方案来完成我需要做的事情 为了便于讨论 我们假设我有一个名为 work 的表 其中包含一些列 其中一列表示给定客户端对该行工作的所有权 场景是 我将连接 2 个客户端并轮询表以查找要完
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • 访问数据库 LIMIT 关键字

    我试图让我的页面列表功能在 ASP 中与 Access 数据库一起工作 但我不知道 Microsoft SQL 中 LIMIT 的替代方案 我已经尝试过 TOP 但这似乎不起作用 这是 MySQL 中使用的语句 SELECT FROM cu
  • SQL Server 2008 R2 内连接无法匹配 varchar 字段,因为它包含特殊字符

    我们正在将 Microsoft SQL Server 2008 R2 用于我们的经典 ASP 应用程序之一 我们有两张表 TableA TableB TableA有以下列 InstName varchar 1024 TableB有这些列 I
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu

随机推荐

  • 如何统计有向图中所有可达节点?

    有一个有向图 可能包含环 每个节点上都有一个值 如何得到每个节点的可达值之和 例如 在下图中 节点 1 的可达和为 2 3 4 5 6 7 27 节点 2 的可达总和为 4 5 6 7 22 我的解决方案 要得到所有节点的总和 我认为时间复
  • REALM、SQLITE、FCM 数据库之间的区别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 REALM SQLITE FCM数据库之间的区别 REALM SQLITE FCM 数据库之间的主要区别是什么 为什么我更喜欢这个数据
  • 何时何地使用 Lambda?

    我试图理解为什么我们真的需要 ruby 中的 lambda 或 proc 或任何其他语言 method def add a b c a b end using proc def add proc a b f Proc new x y x y
  • ds.Tables[0].Select() 代表什么

    博士在这里得到什么 DataRow dr objds Tables 0 Select ProcessName tnProcName Text 我得到的是 dr System Data DataRow 4 而不是单独的行 在 dr 中 现在由
  • IE9:我的网站上的 CPU 利用率始终较低

    我使用 JQuery 和许多拖放元素开发了一个网站 效果非常好 然而 在 IE9 上 当动态加载 使用 load 并显示大量拖放元素时 浏览器总是消耗少量 CPU 10 用于刷新 即使没有任何内容用户长时间不触摸鼠标或滚动页面即可完成此操作
  • 将 Google 域链接到 Amazon ec2 服务器

    我正在使用 Amazon EC2 实例来为 node js 应用程序提供服务 我最近通过以下方式购买了域名谷歌域名 https domains google com我想使用该域名来访问我的 node js 应用程序 Google Domai
  • 在AWS SNS(简单通知服务)电子邮件通知中发送html内容

    我在用AWS SNS 简单通知服务 发送电子邮件通知 在电子邮件的内容中 我必须以表格形式表示数据 目前我正在使用简单的文本字符串打印表格 但有格式问题当通过手机和平板电脑等较小屏幕设备访问电子邮件时 表格数据根本无法解释 我希望使用 ht
  • “结构细化中的参数类型可能不会引用该细化之外定义的抽象类型”

    当我编译时 object Test extends App implicit def pimp V xs Seq V new def dummy x V x I get fsc d aoeu go scala go scala 3 err
  • UITableView 中的图像不断重新加载,并且滚动时错误的图像会闪烁

    我创建了一个 UITableView 它根据 URL 请求填充每个单元格 我使用 dispatch queue 来防止 UItableView 冻结 由于某种原因 当我滚动 UITableView 时 图像会闪烁并消失 并填充错误的单元格一
  • 如何循环遍历表来查找数据集?

    我必须找到订单生命周期的时间差 以分钟为单位 即每个订单从收到订单 活动 ID 1 到键入 2 到打印 3 到交付 4 的时间 for eg 我完全迷失了我应该采取哪种方法 用例或 if then 语句 类似于 for every 循环遍历
  • 如何获取多列的groupby总和

    我有一个 pandas 数据框 如下所示 index col1 col2 col3 col4 col5 0 a c 1 2 f 1 a c 1 2 f 2 a d 1 2 f 3 b d 1 2 g 4 b e 1 2 g 5 b e 1
  • C# 中的 MongoDB 地理空间索引

    我一直在尝试使用 C 官方驱动程序创建和查询 MongoDB 但一次又一次地遇到同样的问题 问题是如何用地理信息创建数据 我只是找不到答案 Code MongoUrl url new MongoUrl mongodb xxx xx x xx
  • Docker:打开/certs/domain.crt:权限被拒绝

    我正在尝试设置一个私人 docker 注册表 我正在使用我自己生成的证书 但我的注册表的 docker 日志显示此错误 time 2015 12 08T08 51 54Z level fatal msg open certs domain
  • 使用 MutationObserver 比较新旧文本内容

    我需要比较更改发生之前和之后元素子级内的文本 我可以使用下面的脚本触发函数并返回新值 但我还需要能够访问旧值 changeButton click function var currentValue parseInt changingEle
  • 使用 WPF 实现平滑文本动画(选取框)

    尝试构建具有流畅文本动画的选取框控件 目前的努力包括 使用平移变换 在 Canvas 依赖属性上使用动画 左 右 在自定义依赖属性 点 上使用动画并使用绘图视觉效果 格式化文本 使用 CompositionTarget Rendering
  • 查找到目的地的旅行时间相同的位置:基于运输时间的热图/等值线(反向等时等值线)

    Note 解决方案r questions tagged r or python questions tagged python是所期望的 我正在尝试根据运输时间绘制轮廓 更清楚地说 我想将具有相似旅行时间 假设为 10 分钟间隔 的点聚集到
  • 看板/Scrum 板 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇其他人在他们的公司中使用什么物理看板 Scrum 板 我理解 由于敏感的商业信息 您可能无法提供董事会的照片 我正在寻找答案你
  • 监控内核注册表更改

    人们能否给我指点 没有双关语 我需要研究的主题才能做到这一点 我并不是真正的 Windows 专家 但我很快就能掌握新概念 我看到了 Mark Russinovich 和 Bryce Cogswell 编写的进程监控程序 http tech
  • 字符串交换适用于 char **,但不适用于 char *

    在这个程序中我交换了前两个名字 include
  • 使用 where 子句的慢查询

    我有以下 sql 查询 只需 1 秒即可执行 select a date b rate c type a value from a inner join b on a id b aid c inner join b id c bid whe