我有一个类似于下面的查询
Update Table1
Set colum1 = 'XYZ'
Where column2 in (1,2,3,....so on)
此处 Column2 的数据类型为 varchar。在我的实际查询中,IN 子句包含 no.of 值,范围从 10000 到 60000,即查询将更新 10000 到 60000 行。
现在,当我提供不带引号的值时,查询需要 10 分钟才能执行。当我给出引号(如下所述)时,同样的查询只用了不到一分钟。
Update Table1*
Set colum1 = 'XYZ'
Where column2 in ('1','2','3',....so on)
这是自然的吗?上述两个查询之间的唯一区别是前者需要隐式转换 IN 子句中的值。有人可以解释一下吗?谢谢
最佳答案
此问题在字符串已用于存储数字键的情况下很常见。 SQL Server 将尽职尽责地执行隐式转换并返回正确的结果,但代价是通过执行扫描而不是查找并正确使用索引来降低性能。 -> SOURCE
关于sql - 带引号和不带引号的更新查询的总运行时间差异太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22631592/