sql - 带引号和不带引号的更新查询的总运行时间差异太大

标签 sql sql-server

我有一个类似于下面的查询

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/

相关文章:

c# - 如何在插入前更新 LINQ 类

php - 对于相似类型的数据,单个表针对多个表

sql - 将嵌套 xml 解析为非规范化表

sql - 优化分组最大查询

mysql - 加入不同的表并用mysql在一行上显示匹配记录

sql - 相当于 GO 的 T-SQL

c# - 在 C# 循环中调用 SQL 存储过程时处理事务

sql - SQL Server 中两列的重复值计数

sql - 在 View 中执行存储过程?

c# - 如何通过 HTTP 从 C# 应用程序连接到 SQL Server?