为什么这个SQL CAST具有性能?

时间:2017-07-20 20:38:09

标签: sql sql-server performance

当我在WHERE子句中看到此代码时,我在SQL Server中重构了一个沉重且写得非常糟糕的存储过程:

SET @SELECT = @SELECT + '
          CAST(LOG_MODULO.DataHora AS DATE) >= '''+ @DATAINI + ''' AND
          LOG_MODULO.DataHora  <= '''+ @DATAFIM +' 23:59:00'' ' ;

LOG_MODULO.DataHoraDATETIME列,@DATAINI@DATAFIMVARCHAR(15)个变量,是的,此查询是通过字符串连接构建的。

我重构了这个:

AND LOG_MODULO.DataHora BETWEEN @DATAINI AND @DATAFIM + ' 23:59:59'

但我的版本运行时间是其前身的5倍。

这是为什么?在不改变输入的情况下编码这个的好方法是什么?

1 个答案:

答案 0 :(得分:1)

由于您使用常规SQL将其转换为动态sql,我将@ datafim2声明为datetime并设置为dateadd(day,1,@ datafim)...然后执行dataHora&gt; = @DataIni和datahora&lt; @ datafim2。要点使列的数据类型与变量相同。