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

动态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看起来像这样: 具有此角色的用户无法调用存储过程。它给出了以下错误,这是我所预期的

  • 问题内容: 如何在MySQL存储过程中构建和使用动态SQL? 问题答案: 我不相信MySQL支持动态sql。您可以执行类似但不同的“准备”语句。 这是一个例子: 准备好的语句通常用于查看给定查询的执行计划。由于它们是使用 execute 命令执行的,并且可以将 sql 分配给变量,因此您可以近似地估计一些与动态sql相同的行为。 这是一个很好的链接: 不要忘记使用最后一行取消分配! 祝好运!