当前位置: 首页 > 面试题库 >

添加SQL Server索引,但是如何仅重新编译受影响的存储过程?

国兴文
2023-03-14
问题内容

我需要向表中添加索引,并且只想重新编译/引用该表的所有存储过程。有什么快速简便的方法吗?

编辑:

从SQL Server 2005联机丛书中,重新编译存储过程:

当通过添加索引或更改索引列中的数据等操作更改数据库时,应通过重新编译来再次优化用于访问其表的原始查询计划。重新启动Microsoft SQL Server
2005后,第一次运行存储过程时,会自动自动进行此优化。如果存储过程使用的基础表发生更改,也会发生这种情况。
但是,如果添加了新索引,存储过程可能会从中受益,那么直到重新启动Microsoft SQL Server之后下一次运行存储过程时,优化才会发生。
在这种情况下,强制存储过程在下次执行时重新编译可能会很有用。

迫使存储过程重新编译的另一个原因是,在必要时抵消存储过程编译的“参数嗅探”行为。当SQL
Server执行存储过程时,该过程在编译时使用的任何参数值都将包含在生成查询计划中。如果这些值代表随后调用过程的典型值,则存储过程在每次编译和执行时都会从查询计划中受益。否则,性能可能会受到影响


问题答案:

您可以执行sp_recompile并提供刚刚建立索引的表名。依赖于该表的所有proc将从存储的proc缓存中清除,并在下次执行时“编译”

从msdn文档中看到此内容: sp_recompile(Transact-SQL)



 类似资料:
  • 本文向大家介绍SQL2005重新生成索引的的存储过程 sp_rebuild_index 原创,包括了SQL2005重新生成索引的的存储过程 sp_rebuild_index 原创的使用技巧和注意事项,需要的朋友参考一下 公司运营着的网站,流量很大,网站是交互式的,经常在过了三四个月的时候索引生成的碎片就很多,由于很大一部分页面没有生成静态,这就导致网站在打开的速度上会变慢。 以前都是手工右击索引重

  • 问题内容: 我有一个简单的MySQL表,并且主索引(id)并未一一编号(1、31、35、100等)。我希望它们被编号为(1、2、3、4)。请告诉我该怎么做。我还要指出,我知道该操作可能造成的后果,但我只是想整理一下桌子。 问题答案: 我同意其他方法也可以,但是我只是给出了一个不同的想法。这将不需要任何临时表创建要求:

  • 我们使用Sonatype Nexus在~.m2\设置中管理maven存储库。xml,集合 到我们的Nexus存储库。 在IntelliJ IDEA“设置中-- 没有索引,我不能使用IntelliJ IDEA里面的“Maven工件搜索”,而是要在Nexus网站中搜索,然后将依赖项复制到pom.xml,不太方便。 有人能告诉我如何在IntelliJ IDEA中添加Nexus存储库索引,以便我可以在ID

  • 问题内容: 让我给出一个方案。您有一个多项目和一个用于部署项目的持续集成服务器。这将部署到本地具有的的存储库。现在,假设您在CI部署项目后立即运行。 您最终将针对远程服务器的还是本地模块进行编译? 换句话说,存储库的对标签有没有影响? 问题答案: 标签是一个聚合。它与的处理方式不同。请注意,您在和中指定的值是不同的。声明a时,请指定maven坐标。同时,您指定相对目录。 您最终将针对远程服务器的模

  • 问题内容: 我正在这个大型数据库上工作,该数据库具有很多SP中嵌入的业务知识[我知道!],并且SP之间有很多链接。即一个存储的过程调用另一个。 我想找出更新特定列的存储过程的列表。我该怎么做。 对于存储过程,如SQL表和分析器列中所述使用showplan_All 对我来说不起作用,因为这是一个共享的dev db。 如上所述,使用来自主数据库的Sp扫描系统文本中的Sp是不可行的,因为我无权访问主数据

  • 问题内容: 就像标题所说的… 我阅读了这篇文章(https://www.elastic.co/blog/changing-mapping-with-zero- downtime ),这个概念很棒,但是我很难找到有关如何通过JAVA API进行操作的不错的参考。 我找到了这个插件:https : //github.com/karussell/elasticsearch- reindex,但似乎对我尝