一位同事最近遇到了这样一种情况:查询安全权限需要大约15秒才能使用= UserID(这是一个UNIQUEIDENTIFIER)进行比较.毋庸置疑,用户对此印象不足.
出于沮丧,我的同事改变了=比较以使用LIKE并且查询加速到1秒以下.
如果不了解数据模式(我无权访问数据库或执行计划),可能会导致性能发生这种变化?
(广泛而含糊的问题,我知道)
它可能只是一个缓存的糟糕的执行计划; 更改为LIKE语句然后只是生成了一个新的执行计划.如果此人已在相关表上运行sp_recompile然后重新运行=查询,则可能已注意到相同的加速.
另一种可能性是这是一个复杂的查询,并且每行都在=运算符之间进行类型转换.LIKE稍微改变了语义,因此类型转换不必在执行计划中占据重要地位.我建议你的同事看看执行计划中的=到位,看看是否有类似的东西
CONVERT(varchar, variable) = othervariable
在执行步骤中.在错误的情况下,单个类型转换可以使查询减慢两个数量级.