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

动态sql存储过程对很多记录来说是一件坏事吗?

井兴怀
2023-03-14
问题内容

我有一个包含近800,000条记录的表,当前正在使用动态sql在后端生成查询。前端是一个搜索页面,该页面大约包含20个参数,并且取决于是否选择了参数,它会在基本查询中添加
AND
…”。我很好奇动态sql是否是正确的方法(因为它运行缓慢,所以看起来不太像)。我正在考虑仅使用我的所有数据创建一个非规范化表。这是一个好主意还是我应该将查询全部构建在一起,而不是使用动态sql逐步构建查询。最后一件事,有没有办法加快动态sql?


问题答案:

与动态SQL相比,您的索引(或缺少索引)更可能导致速度慢。

执行计划是什么样的?在SSMS中执行时,同一个查询是否慢?在存储过程中该怎么办?

如果您的表是未索引的堆,则随着记录数量的增加,它的性能将不佳-
这与查询无关,并且随着表性质的变化,动态查询实际上可以更好地执行,因为动态查询更可能具有其查询不在缓存中时,重新评估计划。这通常不是问题(我不会将其归类为动态查询的设计优势),但在系统的早期阶段,即尚未重新编译SP,但是统计信息和查询计划已过时,但是,数据发生了巨大变化。

还不是静态的。我有动态查询,但没有进行任何优化。如果我在静态查询中运行它并给出了建议,那么应用它们会影响动态查询吗?Xaisoft(41分钟前)

是的,除非您分析了工作负载文件,否则可能不会分析动态查询(EXEC(@sql))。Cade Roux(33分钟前)

当您对已连接的多个表进行搜索查询时,具有索引的列需要既是搜索列,又是主键/外键列-但这取决于各个表的基数。调谐分析仪应显示此信息。Cade
Roux(22分钟前)



 类似资料:
  • 问题内容: 我正在使用Sql Server2008。我的存储过程接受将近150个参数。在性能方面有什么问题吗? 问题答案: 在性能上没有错,但是闻起来可以用动态SQL更好地完成。不看代码很难说。

  • 问题内容: 我正在尝试创建一个存储的proc,它返回所有已更新的记录。 我的更新查询是这样的: 我只是不确定如何返回这些特定记录。 问题答案: 您可以用来获取语句已修改的行。 例子;

  • 1选定列的参数(选定的筛选器/下拉属性或从UI发送的列名) 2 dynamic where子句的参数,用于为点1中选择的类似下拉列表值准备 从视图中获取数据,并以这种方式检索结果 注意:在这一点上没有要求显示特定于某个用户的数据。同样忽略上面代码中的参数插值部分 是否存在任何数据完整性问题,不同的用户将看不到UI上更新的值(为了提供更多的上下文,从此过程中的视图中提取数据,并且该视图数据在应用程序

  • 问题内容: 在SQL2005中,有没有一个简单的过程可以将我所有的存储过程分散到单个.sql文件中。我想将它们移到VSS,但是对于单击每个获取源,将其转储到文本文件等的前景并不太兴奋。 问题答案: 在SQL Management Studio中,右键单击数据库,然后转到任务->生成脚本,逐步浏览向导。其中一页可以让您将每个对象编写脚本到自己的文件中。

  • 问题内容: 我有一个具有应用程序角色的数据库。角色成员都属于Active Directory中的组。我没有给角色授予从表中进行选择的权限,而是给角色赋予了对它需要调用的所有存储过程的执行权限。 除了我的存储过程之一,该过程可以建立一些动态SQL并调用sp_executesql之外,其他方法都可以正常工作。 动态sql看起来像这样: 具有此角色的用户无法调用存储过程。它给出了以下错误,这是我所预期的

  • 主要内容:示例Transact SQL 中的存储过程用于一次又一次地节省编写代码的时间。它通过将过程存储在数据库中并通过传递参数来获得所需的输出来实现这一点。 语法: 下面是存储过程创建的语法 - 参数可选:当我们创建一个过程时,一个或多个参数被传递到过程中。存储过程中有3种类型的参数: IN - 过程可以引用参数。该过程将覆盖参数的值。 OUT- 过程不能引用参数,但过程会覆盖参数值。 IN OUT- 参数被