Fanr

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  395 随笔 :: 0 文章 :: 184 评论 :: 48万 阅读

参数化和即席查询,都是一个二难的选择。

一旦选择参数化 就有可能带来 一种情况就是 执行计划反复被利用。

不会通过收集现有的统计信息,出一个比较优异的执行计划。

即席查询也就是 ad hoc query,每次都需要重编译,花费比较大。

这个是一个2难,需要平衡。对于这个问题 sql server 有 简单参数化,强制参数化和2008 才有的optimize for ad hoc workloads。

optimize for ad hoc workloads 的原理大概如此:

当你第一次执行 ad hoc 查询的时候,被编译出来的执行计划,sql server 存个一部分。
为什么不全存呢,如果全存,adhoc 查询很频繁,那么不就给 内存带来压力了。 

当你第二次查询的时候,就保存这个执行计划。

当你第三次运行的时候,就可以直接从cache 内读取出来执行计划。

EXEC sp_configure 'show advanced options',1
RECONFIGURE
EXEC sp_configure 'optimize for ad hoc workloads',1
RECONFIGURE

对sql server 运行还是又好处的,没事儿就开着吧

posted on   Fanr_Zh  阅读(2313)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示