我有一个包含近800,000条记录的表,当前正在使用动态sql在后端生成查询。前端是一个搜索页面,该页面大约包含20个参数,并且取决于是否选择了参数,它会在基本查询中添加“ AND …”。我很好奇动态sql是否是正确的方法(因为它运行缓慢,所以看起来不太像)。我正在考虑仅使用我的所有数据创建一个非规范化表。这是一个好主意还是我应该将查询全部构建在一起,而不是使用动态sql逐步构建查询。最后一件事,有没有办法加快动态sql?
与动态SQL相比,您的索引(或缺少索引)更可能导致速度慢。
执行计划是什么样的?在SSMS中执行时,同一个查询是否慢?在存储过程中该怎么办?
如果您的表是未索引的堆,则随着记录数量的增加,它的性能将不佳- 这与查询无关,并且随着表性质的变化,动态查询实际上可以更好地执行,因为动态查询更可能具有其查询不在缓存中时,重新评估计划。这通常不是问题(我不会将其归类为动态查询的设计优势),但在系统的早期阶段,即尚未重新编译SP,但是统计信息和查询计划已过时,但是,数据发生了巨大变化。
还不是静态的。我有动态查询,但没有进行任何优化。如果我在静态查询中运行它并给出了建议,那么应用它们会影响动态查询吗?Xaisoft(41分钟前)
是的,除非您分析了工作负载文件,否则可能不会分析动态查询(EXEC(@sql))。Cade Roux(33分钟前)
当您对已连接的多个表进行搜索查询时,具有索引的列需要既是搜索列,又是主键/外键列-但这取决于各个表的基数。调谐分析仪应显示此信息。Cade Roux(22分钟前)