在 where 子句中使用局部变量的替代方法

2023-12-12

我有一个查询,其中有一个使用多个局部变量构建的 where 子句,但这非常慢。以下是一个粗略的示例,因为我当前无权访问该查询:

declare @a varchar(50), @b varchar(50), @c varchar(50)
set @a = '%'
set @b = 'foo'
set @c = '%bar'

我的 where 子句是这样的

where a = @a and b = @b and c =@c

运行大约需要 1 分钟。但是,如果我直接引用 where 子句中的值,例如:

where a = '%' and b = 'foo' and '%bar'

大约需要 5 秒。

所以我的问题是,有没有更好的方法来构造我的 where 子句?需要注意的一件重要事情。 where 子句中使用了大约 10 个局部变量,但大多数都设置为默认值 %

提前致谢


Using 局部变量at WHERE 过滤器导致全表扫描。因为SS在编译时并不知道局部变量的值。因此,它会创建该列可用的最大规模的执行计划。

为了防止性能问题,SS必须在编译时知道变量的值。定义 SP,以及将这些局部变量作为参数传递是问题的解决方案之一。另一个解决方案是,使用sp_executesql并再次将这些局部变量作为参数传递......

或者您可以添加选项(重新编译)在你的 sql 语句的末尾,使你的局部变量被编译。这将解决性能问题。

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

在 where 子句中使用局部变量的替代方法 的相关文章

  • 使用 xmlagg 时出现子查询错误和太多值

    我在连接许多大型表中的所有数据时遇到问题 我昨天对此提出了问题 但不幸的是 listagg 似乎不是一个好的选择 链接子查询返回多行 https stackoverflow com questions 54651144 subquery r
  • 如何对 SQL Server Express 进行实时更改

    我一直在使用 VS studio 开发一个 ASP NET Web 应用程序 我正在使用 SQL Server Express 在开发过程中 我一直在我的服务器上测试我的网络应用程序 每次我需要更新数据库时 我都会简单地删除旧数据库 位于我
  • 在 Doctrine DQL 中选择 count() ,并使用左连接多对多单向关系,其中用户没有关系特定组

    情况 我尝试在 DQL 中为不属于特定组的用户选择 count 标准ManyToMany之间的单向关系User and Group实体来自FOSUserBundle and SonataUserBundle 系统 Symfony 2 5 D
  • 将此 MySQL 查询转换为 PyGreSQL

    我正在开发一个 Ruby 应用程序 它使用 mysql 函数 XOR 和 BIT COUNT 不过 我现在需要在运行 PyGreSQL 的 Heroku 上运行该应用程序 我找不到任何可以帮助我的 PyGreSQL 文档 那么任何人都可以翻
  • 部署 dacpac 所需的权限

    我正在尝试使用 sqlpackage exe 在租户上部署 dacpac 目前 我正在向将部署此功能的帐户授予 SysAdmin 或 db owner 权限 并且它工作正常 但在生产中 如果目标租户数据库属于其他应用程序 我可能无法获得这些
  • 在 SQL Server SELECT 语句中使用 CASE 时消除 NULL

    我有一份大而混乱的报告要写 它连接了 5 个表 一个表中有一列用于多个不同的值 本质上是一个 标签 列 其中标签根据用户想要使用的各种元数据的类型以创造性的方式使用 因此 我对报告的查询返回 3 个几乎相同的行 仅 标签 列有所不同 例如
  • 优化 LINQ 查询 - 如何缩短执行时间?

    我想知道是否有一个好的方法来优化我的 LINQ 查询 我正在使用类似于以下内容的 LINQ 查询从数据库检索数据 PKs is a list of integers var import context table Where x gt P
  • 将 5 gig 文件导入表时出错

    我正在尝试批量插入表 use SalesDWH go BULK INSERT dbo npi FROM S tmp npi csv WITH FIELDTERMINATOR ROWTERMINATOR n lastrow 200 first
  • DB2 - 如何在 IBM System i Access for Windows GUI Tool 中使用参数运行即席选择查询

    我想使用我声明的变量在 IBM System I Navigator tool for DB2 中运行一些临时选择语句 例如 在 SQL Server 世界中 我可以在 SQL Server Management Studio 查询窗口中轻
  • 搜索多个表 (SQL)

    我需要能够有一个 SQL 查询来使用简单的搜索来搜索我的数据库 这是我的表格现在的样子 Table artists id name Table albums id artistID name Table songs id albumID n
  • PDO 连接字符串:最好的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想使用 php pdo 制作一个后端应用程序 我发现了很多不同的方法来处理 PDO 连接字符串 我想知道使用 pdo 执行连接字符串的最佳方法
  • SQL Server 2008 中的 FREETEXT 查询不进行短语匹配

    我在 SQL Server 2008 中有一个全文索引表 我正在尝试使用 FULLTEXT 查询精确的短语匹配 我不认为使用 CONTAINS 或 LIKE 适合于此 因为在其他情况下查询可能不准确 用户没有用双引号括起短语 并且一般来说我
  • 从 URL 生成报告 - SQL Server Reporting Services 2008

    我有 SQL Server Reporting Services 2008 当我打开以下 URL 时 http localhost Reports Pages Report aspx someReport 我正在进入报告屏幕 在其中填写参数
  • NOLOCK 和 UNCOMMITTED 之间有什么区别

    我使用 SQL Server 2012 我写了两个查询 但是它们之间有什么不同NOLOCK and UnCommitted SELECT lastname firstname FROM HR Employees with READUNCOM
  • SQL 查询中的可选参数在检查 NULL 时非常慢

    我有许多已连接的表 最大行数约为 400 万条记录 我们正在存储过程中搜索该表 并且有一个默认值为 NULL 的可选参数 下面是我们正在运行的编辑示例 连接涉及更多表 但只有 1 个字段具有 WHERE 子句 DECLARE OwnerId
  • SQL最近的命令?微软SQL

    我只是编写一个查询来查看我的客户数据库并列出他们下了多少订单等 我正在努力添加到此查询中的是只显示该电子邮件的最新 OrderID 有任何想法吗 这是我的查询 select top 1000 BuyerEMail COUNT HowMany
  • 使用实体框架创建临时表

    我想使用实体框架在 SQL Server 中创建临时表 我有什么办法可以做到这一点吗 如果我可以创建临时表 我的下一个问题是 如何读取它 提前致谢 Andr 好吧 所以你不喜欢存储过程路线 说实话我也不喜欢 但这是我能想到的最快的方法 基于
  • SQL 用随机数据填充表

    我有一个包含两个字段的表 id UUID 是主键并且 描述 var255 我想用SQL语句插入随机数据 我希望这个描述是随机的 PS 我正在使用 PostgreSQL 我不确定这是否符合 随机描述 的要求 也不清楚您是否想要生成完整的数据
  • 有没有一种简单的方法来获取 .NET 为参数化查询生成的“sp_executesql”查询?

    背景 如果我有以下程序 public class Program public static void Main using var connection new SqlConnection Server local Database Te
  • 针对 SqlClient 的 getschema("foreignkeys") 未产生足够的信息

    我需要两个表和两组字段 而不是外键名称和其中一个表名称 有谁知道如何查询SQL Server完整的外键信息 谢谢 这可能是一项复杂的冒险 GetSchema 和 INFORMATION SCHEMA 视图不完整 导致需要直接查询 sys 视

随机推荐

  • 如何用 ImageIcon 完全填充 JButton 的表面?

    我尝试用 ImageIcon 完全填充 Jbutton 的 表面 到目前为止我的结果是 正如您所看到的 退出 标签的边缘和按钮的边缘之间仍然存在一些空间 您可以看到背景上有白蓝色填充的按钮 我想要的是用标签完全覆盖这个按钮 有没有办法做到这
  • 如何使 For 循环处理非整数

    以下代码很简单并且输出符合预期 CODE Option Explicit Sub Test loop2 Dim i As Long For i 3 To 3 Step 1 Debug Print i Next i End Sub OUTPU
  • 如何使用母版从 asp:content 页面访问母版页上的用户控件?

    我不断收到 让我成为一个做 xyz 的工具 的请求web app我们正在准备 因此 在第三次之后 我意识到将它们全部放在一起并使用母版页会更容易 我有一个名为 MessageCenter 的用户控件 用于显示错误 成功和参考消息 因此我将其
  • 无需清除即可重新喷漆

    我正在开发一个模仿 Paint 的程序 问题是当我绘制新形状时 以前的形状会被删除 我试图注释掉我对paintComponents的超级调用 它可以工作 但留下了太多的绘图 import java awt Color import java
  • Jersey Multipart - 缺少起始边界

    我有一个带有 Netty 的 jersy 2 13 服务器应用程序 我尝试上传带有 multipart form data 的文件 但出现此错误 错误信息 7605 10 01 49 309 child group 3 1 org jvne
  • SQL自动增量id具有重复值和多列主键?

    CREATE TABLE Apps id int NOT NULL company varChar 20 NOT NULL name varChar 20 NOT NULL CONSTRAINT company app id PRIMARY
  • Go 中的通用哈希图

    我正在尝试制作一个包装纸map输入以便我可以添加一些方法 例如contains 这几乎让我怀念Java 但是 我不知道我是否可以在Java中做类似泛型的事情 虽然我读过的几乎所有内容都说 Go 没有泛型类型 但肯定有一种更好的方法 而不是为
  • 如何仅使用私钥文件创建java密钥库?

    我只有一个私钥作为 key 文件 没有其他 crt 或 ca 内容 我需要用它创建一个 java 密钥库 如何转换呢 到目前为止我尝试过的 我将 key 文件重命名为 pem 我使用 openssl 从 pem 中创建了 p12 文件 最后
  • 使用 Gnome-Shell JS 接口获取联系人列表

    我刚刚开始摆弄编写 gnome shell 扩展 并且想知道如何获取用户的联系人列表 我已经找到了一些可能的文件 gnome shell js ui contactDisplay js and gnome shell src shell c
  • 将命令输出解析为变量 LIVE(网络流量监控)

    我正在用 bash 编写一个网络监控脚本 我使用的基本命令是ettercap T M ARP i en1 然后我用管道egrep color Host GET 进去 我得到的示例输出如下所示 GET images srpr logo11w
  • 如何比较sql中的长文本和日期值?

    我以 dd mm yyyy 格式存储日期值作为长文本 我需要将此值与CURDATE 在一个SELECT陈述 请不要问我为什么要以长文本形式保存 有什么办法可以做到吗 这段代码当然不起作用 但它说明了我想要做的事情 WHERE longtex
  • UWP 尝试使用附加的依赖属性对滚动查看器进行动画处理

    我正在尝试在 UWP 中对滚动查看器的水平偏移进行动画处理 但动画目标未识别附加属性
  • 为什么 DateTime.ToString("dd/MM/yyyy") 给我 dd-MM-yyyy ?

    我希望将我的日期时间转换为格式为 dd MM yyyy 的字符串 每当我使用它进行转换时DateTime ToString dd MM yyyy I get dd MM yyyy反而 我必须设置某种文化信息吗 斜杠是日期分隔符 因此将使用当
  • 如何找出 .net 类实现了哪些接口?

    好的 我最近一直在学习 c 和 net c 文档中似乎缺少一件事http msdn microsoft com java 文档中存在 例如数组列表文档 是一个java类的文档会这样说 所有实现的接口 可序列化 可克隆 可迭代 集合 列表 随
  • 如何禁用 grails 中的 log4j 插件?

    看来Grails 2 1 log4j 插件在 grails 应用程序初始化期间重置 log4j 配置 请参阅下面的堆栈跟踪 at org apache log4j LogManager resetConfiguration LogManag
  • 使用 Spark 从 Scala 中的 Dataframe 中的数组列中删除 null (1.6)

    我有一个带有 id 列的数据框和一个具有结构数组的列 架构 root id string nullable true desc array nullable false element struct containsNull true na
  • 提交 HTML 表单后,如何使用 FastAPI 将用户重定向回主页?

    我有一个包含学生表格的页面 我添加了一个按钮 允许您向表中添加新行 为此 我将用户重定向到带有输入表单的页面 问题是 提交完成的表单后 用户会转到一个新的空白页面 如何传输已完成表单中的数据并将用户重定向回表格 我刚刚开始学习Web编程 所
  • Eclipse 插件 - 如何获取编辑器的最后工作

    我正在编写一个 Eclipse 插件 它通过几个按钮向用户公开一个视图 单击任何按钮时 我想将特定注释粘贴到用户当前正在工作的编辑器窗口中以及他指向的光标位置 一旦用户单击该按钮 编辑器窗口就不再具有焦点 并且以下代码不起作用 workbe
  • 来自参数的 Azure 数据工厂源数据集值

    我在 Azure Datafactory 中有一个由 CSV 文件支持的数据集 我在数据集中添加了一个附加列 并希望从数据集参数传递它的值 但值永远不会复制到该列 type AzureBlob structure name MyField
  • 在 where 子句中使用局部变量的替代方法

    我有一个查询 其中有一个使用多个局部变量构建的 where 子句 但这非常慢 以下是一个粗略的示例 因为我当前无权访问该查询 declare a varchar 50 b varchar 50 c varchar 50 set a set