sql-server – 存储过程和OPTIMIZE FOR UNKNOWN
|
我已经阅读了SQL Server 2008 OPTIMIZE FOR UNKNOWN查询提示.我明白它是如何工作的. 但是,我有一个关于何时何地使用它的问题.它不能在UDF中指定.它可以在存储过程中指定.但是,this MSDN博客文章声明如下:
在我看来,传递给存储过程的任何参数都将被“嗅探”,从而帮助SQL Server编译最佳执行计划.这意味着将重新访问/重新编译缓存的计划(不确定该机制).然而,这是令人困惑的,因为它否定了OPTIMIZE FOR UNKNOWN的全部需求. 关于查询提示的MSDN文章没有涵盖我的问题. 有人可以为我解答这个问题,理想情况下,可以通过指向Microsoft的某些内容来解决这个问题.谢谢. 解决方法SQL编译器的默认行为是使用SP首次执行时给出的任何参数的值来帮助优化计划(参见 this MSDN article on SP recompilation的第2和第3段).然后缓存该计划以供重用,直到它离开缓存 – 计划缓存过程 here的许多细节.您引用的MSDN博客注意到了使编译器更容易完成此过程的方法;我认为第4项(在问题中引用)表明这是存储过程优于ad-hoc SQL的优势. OPTIMIZE FOR UNKNOWN提示指示编译器避免默认行为;它应该忽略第一次执行中给出的参数值,并选择更通用的计划.这是问题中引用的博客文章末尾的建议列表中第2项的更极端版本;
但是,编译器将完全忽略参数值,而不是选择平均值或代表值. 考虑在第2项中引用的情况下使用OPTIMIZE FOR UNKNOWN – 当相同的查询提供非常可变的性能时,因为在某些情况下计划很差 – 通常在查询中的参数过滤非常可变基数的列时. (编辑:天瑞地安资讯网_保定站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 为什么查询导致溢出到tempdb?
- sql-server – 更改Getdate的输出
- SQL连接到相关子查询,其中表通过重叠范围相关联
- 主键的SQL Server BIGINT或DECIMAL(18,0)
- sql – 如何找到SSIS 2008 R2包中使用的.NET框架版本?
- sql-server – 限制SQL Server上的连接权限
- sql-server – 什么时候应该指定PAD_INDEX?
- sql-server – 最大用户连接数
- sql-server-2008 – 如何使用SQL Server DDL进行事务处理?
- sql – Postgres:选择具有大于1的字段数的所有行
- sql-server – 每周重建索引是个好主意吗?
- sql-server – SQL Server 2008R2的最佳驱动器配
- sql-server – ‘SELECT TOP’性能问题
- sql varchar(max)vs varchar(fix)
- dns-prefetch是什么 前端优化:DNS预解析提升页面
- sql中identity自增的方法是什么?
- sql-server – 从备份SQL Server还原,只是主文件
- sql-server – 为什么子查询使用并行性而不是连接
- sql-server – 服务代理已备份,现在正在接收,但似
- sql-server – 何时使用TINYINT over INT?

