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

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 和 SQLite 数据库

    我有一个用于测试目的的 C Net 4 0 控制台应用程序 使用 VS 2012 我的目标是能够创建一个可在 MS SQL Server 数据库和 SQLite 数据库上使用的单个实体框架 edmx 文件 基本上 我想使用相同的实体模型类和
  • 哪种本机 dotNet 数据类型最适合传递 SQL Server HierarchyId 值?

    具体来说 我们有一个接受 HierarchyId 作为参数的 SQL Server 存储过程 并且通常我们的存储过程上有一个 SOAP 层 允许通过 SOAP 调用它们 SOAP 服务是使用 C 方法上的 WebMethod 属性来实现的
  • 如何将 nvarchar 解码为文本(SQL Server 2008 R2)?

    我有一个 SQL Server 2008 R2 表nvarchar 4000 field 存储该表的数据如下所示 696D616765206D61726B65643A5472 or 303131 011 我看到每个字符都编码为十六进制 我如
  • 如何使用 REST API 导出 SSRS 2017 报告

    我已经设置了 SSRS 2017 我需要使用他们的新 REST API 导出 SSRS 报告 我一直在查看 API 规范here https app swaggerhub com apis microsoft rs SSRS 2 0但我在
  • 如何在SQL Server中创建SYS模式的表?

    可以在 SQL Server 2008 sys 架构中创建表吗 我知道可以将表标记为系统 但不能更改架构 有什么窍门吗 您无法将自己的对象添加到 sys 架构中 无法在 sys 架构中创建用户定义的对象 盖尔 埃里克森 MS SQL Ser
  • 捕获 SQL Server 时态表删除上的 SysEndTime

    是否可以使用 OUTPUT 关键字捕获 SysEndTime 时间时间戳 例如 DECLARE MyTableVar TABLE sysendtime datetime2 DELETE FROM dbo someTable OUTPUT D
  • 在ASP CLASSIC中使用SQL参数,对象定义不正确错误

    我试图使用参数保护我的 INSERT 语句免受 SQL 注入 但由于某种原因我收到错误 Parameter object is improperly defined Inconsistent or incomplete informatio
  • CROSS APPLY 不适用于 SQL SERVER 2000?

    如何在 SQL Server 2000 中使用与 CROSS APPLY 等效的功能 我有一个函数返回传递的 id 的顶级父级 ALTER Function dbo fn GetTopParentRiskCategory RctId int
  • 一个存储过程创建的临时表可以在另一个存储过程中使用吗?

    我有一个存储过程 它使用找到的索引创建一个临时表CONTAINSTABLE就像 我放了一段存储过程代码 CREATE TABLE tmpTable ID INT RANK INT SELECT query SELECT DISTINCT I
  • SQL Server 2008 R2 的 Try_Convert

    我正在使用 SQL Server 2008 R2 并且有一个VARCHAR我想要转换为的列DECIMAL 28 10 using CONVERT 但其中许多行的格式错误 因此无法将它们解析为数字 在这种情况下 我只想通过将结果设置为 0 或
  • 使用 Python 中的 SQL Server 存储过程 (pyodbc)

    我有一个存储过程 代码 DECLARE RC int DECLARE id varchar 13 DECLARE pw varchar 13 DECLARE depart varchar 32 DECLARE class varchar 1
  • 表名搜索

    我使用以下命令在特定数据库的存储过程中搜索字符串 USE DBname SELECT Name FROM sys procedures WHERE OBJECT DEFINITION OBJECT ID LIKE xxx 修改上面的内容是否
  • SQL Server freetexttable 部分单词

    我第一次使用 SQL 自由文本搜索 我有点困惑为什么它会这样 我有一个联系人表 用户可以搜索并且我正在使用 SELECT Contacts Rank FROM FREETEXTTABLE Contacts O Roarty AS Conta
  • 从表中删除孤儿

    我正在尝试清理一张有很多孤立项目的桌子 我通过查找空值来检查是否与另一个表存在关系来解决此问题 DELETE FROM table1 LEFT JOIN table2 ON table1 ID table2 ID WHERE table2
  • 将大量实体插入 SQL Server 2012 [重复]

    这个问题在这里已经有答案了 我正在进行一个使用 Entity Framework 5 和 SQL Server 2012 的项目 我们需要一次插入大量行 100k 个实体的顺序 基本上 我们有一个物理程序 它输出大量二进制数据 然后我们需要
  • SQL Server 用分隔符分割字符串

    我有一个输入字符串 100 2 3 101 2 1 103 2 3 我想解析它并将其添加到具有 3 列的表中 因此它应该是 f x col1 col2 col3 100 2 3 类似的其他数据以逗号分隔作为记录和 作为列 Thanks ni
  • 避免连接失败时出现空指针

    我有我的域类 带有命名查询 class Atendimento implements Serializable Funcionario funcionario static mapping funcionario column FUNCOD
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下

随机推荐

  • 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