有一个写入很多的表,但数据随后被应用程序端删除并保持相对不变。它被多个除了IN子句之外相同的查询命中,可以有一个,两个或50个选项
WHERE Name IN ('test1', 'test2', 'test3', 'etc', 'etc')
代码来自应用程序内部,无法更改,来自实体框架或类似的东西。我通过使用计划指南改进了几个查询,我知道这些可能会造成技术债务,因为今天的好计划明天可能不是一个好计划,但由于定期写入/清除此表,我们还没有遇到过这种情况。
所以我的问题是,我有两个查询,它们的 IN 子句值仅相差 2/3,我已经使用 query1 的指南锁定了一个好的计划是否可以针对 query2 锁定相同的计划句柄。这些计划与“好”计划和“坏”计划相似,唯一的区别是排序操作。
运行 SQL 2017 Ent
过得更好
如果两个查询之间的差异类似于:
对比
那么你可能处于以不同方式处理事情的有利位置。
强制参数化应该让您进行文字值替换,以便两个查询在哈希之间匹配,这也使您能够为您选择的它们强制执行一个好的计划。