Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 这句话比前一句快吗?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 这句话比前一句快吗?

Sql 这句话比前一句快吗?,sql,sql-server,tsql,Sql,Sql Server,Tsql,如果我更改了这个CASE语句的逻辑,我正在运行一些旧代码: CASE WHEN ClaimNo.ClaimNo IS NULL THEN '0' WHEN ClaimNo.ClaimNo = 1 THEN '1' WHEN ClaimNo.ClaimNo = 2 THEN '2' WHEN ClaimNo.ClaimNo = 3 THEN

如果我更改了这个CASE语句的逻辑,我正在运行一些旧代码:

                CASE WHEN ClaimNo.ClaimNo IS NULL THEN '0'
                     WHEN ClaimNo.ClaimNo = 1 THEN '1'
                     WHEN ClaimNo.ClaimNo = 2 THEN '2'
                     WHEN ClaimNo.ClaimNo = 3 THEN '3'
                     WHEN ClaimNo.ClaimNo = 4 THEN '4'
                     ELSE '5+'
                END AS ClaimNo ,
如果我将其更改为:

                CASE WHEN ClaimNo.ClaimNo >= 5 THEN '5+'
                ELSE COALESCE(ClaimNo.ClaimNo,0) END 'ClaimNo' ,

从技术上讲,这个声明会更快吗?作为一个语句,它显然要短得多,而且似乎不会运行那么多的语句来获得相同的结果。

这些语句是不一样的!case表达式返回一个类型,在本例中,您希望该类型为字符串,因为“5+”是字符串。但是,在where中混合字符串和整数将导致类型转换错误

哪个更快取决于数据的分布。如果大多数数据包含5个或更多,则第二种方法将更快。如果写为:

(CASE WHEN ClaimNo.ClaimNo >= 5 THEN '5+'
      ELSE CAST(COALESCE(ClaimNo.ClaimNo, 0) as VARCHAR(255))
 END) as ClaimNo,
事实上,只有一个比较,所以从比较的角度来看,它会更快

下一个问题是,从数字到字符串的转换是否比单独列出每个值的多次比较快。老实说,我不知道。很长一段时间以来,我一直关注查询性能


为什么我不知道?这种微观优化在现实世界中基本上没有影响。您应该使用有效的逻辑版本;可读性和可维护性也很重要。当然,性能是一个问题,但是在其他语言中很重要的位篡改技术在SQL中通常没有一席之地,SQL设计用于处理大量数据,这些数据分布在多个处理器和磁盘上。

这些都不一样!case表达式返回一个类型,在本例中,您希望该类型为字符串,因为“5+”是字符串。但是,在where中混合字符串和整数将导致类型转换错误

哪个更快取决于数据的分布。如果大多数数据包含5个或更多,则第二种方法将更快。如果写为:

(CASE WHEN ClaimNo.ClaimNo >= 5 THEN '5+'
      ELSE CAST(COALESCE(ClaimNo.ClaimNo, 0) as VARCHAR(255))
 END) as ClaimNo,
事实上,只有一个比较,所以从比较的角度来看,它会更快

下一个问题是,从数字到字符串的转换是否比单独列出每个值的多次比较快。老实说,我不知道。很长一段时间以来,我一直关注查询性能


为什么我不知道?这种微观优化在现实世界中基本上没有影响。您应该使用有效的逻辑版本;可读性和可维护性也很重要。性能当然是一个问题,但在其他语言中很重要的位篡改技术在SQL中通常没有一席之地,SQL设计用于处理大量数据,分散在多个处理器和磁盘上。

为什么不试试呢?如果你能找到任何现实世界中的场景,其中的差异甚至会影响性能,而不是维护,我会给你一个奖励。第二个是字符串与整数的混合。第一个不给ClaimNo=0的机会。我建议先研究准确度。顺便说一句,案例表达。T-SQL中没有CASE语句。正如公认答案中指出的,第二种语法无效。在询问哪个更快之前,您应该先测试语法。为什么不试试呢?如果您能找到任何实际场景,其中的差异甚至会影响性能,而不是维护,我会给您一个奖励。第二个是字符串与int的混合。第一个不给ClaimNo=0的机会。我建议先研究准确度。顺便说一句,案例表达。T-SQL中没有CASE语句。正如公认答案中指出的,第二种语法无效。在询问哪个更快之前,应该先测试语法。