存储过程和针对未知进行优化

2023-11-29

我已经阅读了 SQL Server 2008 OPTIMIZE FOR UNKNOWN 查询提示。我明白它是如何运作的。

不过,我有一个问题where and when使用它。不能在 UDF 内指定它。它可以在存储过程中指定。然而,thisMSDN 博客文章指出以下内容:

4.将查询移入存储过程可以将其放入单独的 程序上下文并且可以是一个很好的 使该值可见的方法 优化器(注意:这适用于 SQL 2000年也是如此)

在我看来,这似乎是说传递给存储过程的任何参数都将被“嗅探”,从而帮助 SQL Server 编译最佳执行计划。这意味着缓存的计划将被重新访问/重新编译(不确定该机制)。然而,这很令人困惑,因为它否定了 OPTIMIZE FOR UNKNOWN 的全部需要。

MSDN 关于查询提示的文章没有涵盖我的问题。

有人可以帮我回答这个问题吗,最好能指出微软的一些东西可以解决这个问题。谢谢。


SQL 编译器的默认行为是使用第一次执行 SP 时给出的任何参数的值来帮助优化计划(请参阅第 2 段和第 3 段)这篇关于 SP 重新编译的 MSDN 文章)。然后,该计划将被缓存以供重复使用,直到它离开缓存 - 有关计划缓存过程的大量详细信息here.

您引用的 MSDN 博客指出了使编译器更轻松地完成此过程的方法;我认为第 4 项(在问题中引用)表明这是存储过程相对于即席 SQL 的优势。

The OPTIMIZE FOR UNKNOWN提示指示编译器避免默认行为;它应该忽略第一次执行中给出的参数值并选择更通用的计划。这是问题中引用的博客文章末尾建议列表中第 2 项的更极端版本;

2 如果你发现优化器是 随着时间的推移选择不同的计划 有不同的表现 特性,考虑使用 带代表的参数提示 “平均”值以获得良好的、常见的 合理运行的查询计划 对于所有值。

但编译器不会选择平均值或代表值,而是实际上完全忽略参数值。

考虑使用OPTIMIZE FOR UNKNOWN在第 2 项中引用的情况下 - 当同一查询提供非常可变的性能时,因为计划在某些情况下很差 - 通常是当查询中的参数过滤基数非常可变的列时。

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

存储过程和针对未知进行优化 的相关文章

  • SQL Server Management Studio v18 的命令行参数登录

    使用 SQL Server 身份验证时是否仍然可以从命令行打开 SQL Server Management Studio v18 根据微软的发行说明 由于安全风险 他们删除了 P 命令行参数 因此 可以从命令行使用 SQL Server 身
  • 在 SQL Server 2005 IMAGE 列中存储 20 Meg 文件的最有效方法

    我们将文档存储在 SQL Server 2005 数据库表中 列格式为 Image 每次我尝试存储大于 1 Meg 的 PDF 文件时 它都会以某种方式损坏 NET 中是否有任何特别有效的方法来序列化大文件 10megs 并将其存储到数据库
  • Oracle 删除约束级联等效于 Sql Server

    在Oracle中 删除约束PK SAI我使用语法 ALTER TABLE SAISIE DROP CONSTRAINT PK SAI CASCADE SQL Server 中与此等效的是什么 您正在考虑与实际 DELETE 语句相关的 FO
  • SQL Server Like 查询不区分大小写

    Query SELECT from Table 2 WHERE name like Joe Output 1 100 Joe 2 200 JOE 3 300 jOE 4 400 joe 为什么不区分大小写 Problem 查询不区分大小写
  • 合并sql中的列

    我正在使用 SQL Server 2017 有一个存储过程 其中我有一个带有连接的简单选择 例如 SELECT p legacyKey AS JobNumber p Name AS JobName G Label AS DesignStat
  • 当我使用可变参数而不是常量参数时,为什么我的内联表 UDF 慢得多?

    我有一个表值内联 UDF 我想过滤该 UDF 的结果以获得一个特定值 当我使用常量参数指定过滤器时 一切都很好 并且性能几乎是瞬时的 当我使用可变参数指定过滤器时 它会花费明显更大的时间块 大约是逻辑读取的 500 倍和持续时间的 20 倍
  • 让 Hibernate 和 SQL Server 与 VARCHAR 和 NVARCHAR 良好配合

    我目前正在大型数据库的某些表中启用 UTF 8 字符 这些表已经是 MS SQL 类型 NVARCHAR 此外 我还有几个使用 VARCHAR 的字段 Hibernate 与 JDBC 驱动程序的交互存在一个众所周知的问题 例如 参见在 h
  • 我可以根据多列删除数据库重复项吗?

    I 不久前问过这个问题 https stackoverflow com questions 4952250 how to delete duplicates from a database table based on a certain
  • Docker 中的 Web api 无法连接到主机上的 SQL Server,并出现登录前握手错误

    首先有一些类似的问题 但我已经尝试了我能找到的所有建议 但似乎没有任何效果 如果你能找到我没有提到的 请评论 我会尝试一下 概要是我正在尝试将 Docker 容器中的 NET Core 3 1 Web api 连接到主机上的 SQL Ser
  • 使用条件 SQL 统计每月汇总记录

    我有一张桌子 我们就叫他们桌子吧SUMMARYDATA NIP NAME DEPARTMENT STATUSIN STATUSOUT TOTALLOSTTIME A1 ARIA BB 2020 01 21 08 06 23 2020 01
  • TSQL - 生成文字浮点值

    我理解比较浮点数时遇到的许多问题 并对它们在这种情况下的使用感到遗憾 但我不是表格作者 只有一个小障碍需要克服 有人决定使用浮点数 就像您期望使用 GUID 一样 我需要检索具有特定浮点值的所有记录 sp help MyTable Colu
  • ASP SQL Server 连接

  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • Entity Framework 6(代码优先)实体版本控制和审计

    我正在考虑将 Entity Framework 6 1 1 与 SQL Server 2008 R2 一起使用 目前 我正在使用代码优先的 EF 功能创建模型和数据库 我的基本用例是创建一个特定实体的所有更改的日志 ID是关键栏 以帮助审核
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • SQL Server使用in关键字传递字符串数组查询

    我认为 IN 子句不能接受具有多个值的绑定参数 Oracle 不能 需要几分钟 查询是 declare setting varchar max set setting Sales Entry Grid Cursor Customer Man
  • ALTER TABLE 语句与 FOREIGN KEY 约束冲突

    为什么要添加外键tblDomare表导致此错误 ALTER TABLE 语句与 FOREIGN KEY 约束 FK tblDomare PersN 5F7E2DAC 冲突 冲突发生在数据库 almu0004 表 dbo tblBana 列
  • 如何获得一列中的最大数量?

    我一直在尝试找到一个如何获取列中最大数字的示例 我想做的是 找到 TABLE A 中的最大列数 点 列 例如 我想输出这个 MAX 数字
  • SQL服务器超时

    我的应用程序是在经典 asp 上开发的 但也使用 asp net 因为我正在将应用程序迁移到 Net 上 它使用 SQL Server 作为数据库并托管在 Windows Server 2003 上 现在的问题是应用程序在很长一段时间内继续
  • 将 SQL Server 2008 DB 迁移到 Postgres [重复]

    这个问题在这里已经有答案了 我想将 SQL Server 2008 数据库迁移到 Postgres 有没有一种无痛的方法来做到这一点 是否有任何工具可以扫描架构和存储过程以标记兼容性问题 无痛http dbconvert com conve

随机推荐

  • SBT:遍历项目依赖图

    我有一个多模块 Web 项目 其依赖关系图与此类似 WAR project A1 A2 A3 B1 B2 B22 B3 这就是战争项目所依赖的A1这又取决于A2 and A3等等 现在 在打包 war 项目之前 我想将一些 Web 资源从其
  • C++ 结构体排序

    我有一个自定义结构向量 每次都需要根据不同的标准进行排序 实现运算符 但我希望每次调用 C 标准排序时都能够指定排序标准 怎么做 请注意 运行时间最好高效 Thanks 您可以使用第三个参数定义每次运行排序算法时使用的比较函数 templa
  • jq 尝试使用变量修改 JSON 时出现“无效数字文字”错误

    我想将值通过管道传输到 bash 脚本中 该脚本将使用 jq 更改 json 文件中的值 我已经为此工作了一段时间 但无法克服第一组错误 这是我的简单 json 文件 0000000 pogo AJHVUYKJBOIHKNNLNM 7000
  • 每台计算机是否都有一些唯一的ID,以区分一台计算机和另一台计算机?

    我正在使用 C 在 NET Framework 中开发一个 Windows 应用程序 我想知道每台制造的计算机是否有唯一的 ID 让它由任何制造商制造 但它必须是唯一的 谢谢 比布 检查一下 如何获取计算机的唯一ID 硬盘 ID 卷序列号
  • Node Mailer 错误:本地主机中的“不支持的配置,将 Nodemailer 降级到 v0.7.1 才能使用它”

    我是 Nodejs 新手 尝试从以下地址发送邮件节点邮件程序模块但有错误 即 Unsupported configuration downgrade Nodemailer to v0 7 1 to use it 这是我的代码 var nod
  • Ionic 框架 PdfViewer

    我想开发移动 pdf 电子书应用程序 是否有 ionic 框架的 pdf 查看器组件 我喜欢 mozilla pdf js 我需要离子项目示例 您尝试过角度模块吗ng pdfviewer 因为 Angular 在 Ionic 的底层工作
  • 从Java中的静态方法获取类名

    如何从该类中的静态方法获取该类的名称 例如 public class MyClass public static String getClassName String name what goes here so the string My
  • 视频未在 Web 视图中显示

    我有一个 Html 页面 在这个 Html 页面中我显示一个视频 但该视频没有显示在我的应用程序的 web 视图中 而是显示在默认浏览器中 所以请告诉我问题是什么 下面是我的代码和视频和 html 文件存储到SD卡中 抱歉我的英语沟通不好
  • 如何更改 DatePickerDialog 中 NumberPickers 的顺序

    我想交换月份和日期 旋转器 我想将日期列 微调器 发送到左侧 将月份列 微调器 发送到中间 是否可以 根据来源中的注释 这些的顺序NumberPickers 由用户选择的系统范围日期格式确定 并根据给定用户区域设置确定最佳顺序 没有可用的公
  • 如何让 Android 响应触摸拖动?

    我正在创建一个网络应用程序 其中包含带有溢出的 div 滚动样式 由于 Android 浏览器不支持此功能 因此我需要通过自己的自定义功能来使用触摸和拖动 element bind touchmove function event even
  • 序列化/反序列化协议缓冲区

    我目前正在使用 Protocol Buffers C 版本 3 我正在向不同的服务来回发送消息 目前正在尝试将某些消息中存储的一些数据保存到数据库 实际上可以是任何类型 问题在于byte 被创建为类型字节串 and 列表被创建为重复字段 现
  • 如何在列表框中的项目之间显示分隔线?

    我在 Windows Phone 7 应用程序中使用 ListBox 控件 我想在列表行之间显示分隔线 线 尽管许多 不是 wp7 ListBox 示例似乎都有分隔符 但我无法找到有关此内容的任何信息 受到 NestorArturo 的启发
  • 导航时部分页面更新(PrimeFaces ajax)

    我使用 Facelets 模板完成了一个基本的 JSF 应用程序 我的模板如下
  • Android HTTP 用户代理

    如何在http user agent中获取真实设备 当我使用 WebView 时 我可以获得这样的真实值 HTTP USER AGENT gt Mozilla 5 0 Linux U Android 2 2 en gb LG P500 Bu
  • 如何解码视图状态

    我需要查看 ASP NET 页面的视图状态内容 我寻找视图状态解码器 发现Fridz Onion 的 ViewState 解码器但它要求页面的 url 来获取其视图状态 由于我的视图状态是在回发后形成的 并且是更新面板中操作的结果 因此我无
  • SQL 分组依据/计数:对多个列中的相同值进行计数?

    我试图弄清楚如何编写一个对多个列的值进行计数的查询 结果表在每列中对每个可能的值进行计数any column 示例 假设我有mytable Source data table P1 P2 P3 a b a a a a b b b a b b
  • 对象未添加到 NSMutableArray Objective -C

    我试图简单地将对象添加到可变数组中 但它们不会插入 我没有收到错误或任何错误 我不知道发生了什么 在我的主委托文件中 我将一个数组分成 4 个单独的字符串 如下所示 NSArray split currentParsedCharacterD
  • 如何避免使用 ANTLR3 构建中间和无用的 AST 节点?

    我编写了一个 ANTLR3 语法 该语法细分为更小的规则以提高可读性 例如 messageSequenceChart msc mscHead bmsc endmsc end Where mscHead is a shortcut to ms
  • 使用 std::chrono 计算持续时间会给出 0 纳秒,而它应该需要很长时间

    我试图使用 std chrono 计算 for 循环所花费的持续时间 但即使我通过增加绑定值使循环花费更长的时间 它也会给出 0 纳秒 这是代码 pragma pack 1 dont align let s let it take long
  • 存储过程和针对未知进行优化

    我已经阅读了 SQL Server 2008 OPTIMIZE FOR UNKNOWN 查询提示 我明白它是如何运作的 不过 我有一个问题where and when使用它 不能在 UDF 内指定它 它可以在存储过程中指定 然而 thisM