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