Tenha uma tabela que é muito gravada, mas os dados são removidos pelo lado do aplicativo e permanecem relativamente constantes. É atingido por várias consultas iguais, exceto pela cláusula IN, pode haver uma, duas ou 50 opções
WHERE Name IN ('test1', 'test2', 'test3', 'etc', 'etc')
O código é de dentro do app e não pode ser alterado, vindo do Entity framework ou algo similar. Eu melhorei várias consultas usando guias de plano, estou ciente de que eles podem criar dívidas de tecnologia, pois um bom plano hoje pode não ser um bom plano amanhã, mas como esta tabela é escrita / limpa regularmente, não experimentamos isso.
Portanto, minha pergunta, tenho duas consultas que diferem apenas em 2/3 dos valores da cláusula IN, bloqueei um bom plano usando um guia para query1, é possível bloquear o mesmo identificador de plano em relação à query2. Os planos são semelhantes, os planos 'bons' e 'ruins', a única diferença é uma operação de classificação.
Executando o SQL 2017 Ent
melhor
Se a diferença entre as duas consultas for algo como:
contra
Então você provavelmente está em uma boa posição para abordar as coisas de maneira diferente.
A parametrização forçada deve obter a substituição de valor literal para que ambas as consultas correspondam aos hashes, o que também lhe daria a capacidade de forçar um único plano bom para elas de sua escolha.