使用结果比较日期会降低性能

时间:2017-02-15 12:30:47

标签: sql sql-server sql-server-2008 msbi

我在查询的where子句中使用下一个条件:

CONVERT(INT, CONVERT(VARCHAR(10), DA.ACCESS_DATE, 112))  
        > = CONVERT(INT, CONVERT(VARCHAR(10), CCM.START_DATE, 112))
AND 
CONVERT(INT, CONVERT(VARCHAR(10), DA.ACCESS_DATE, 112)) 
        < ISNULL(convert(int, convert(varchar(10), CCM.[END_DATE], 112)), 20161001) 

使用上述条件运行查询时,返回输出需要花费大量时间。

有什么方法可以获得更快的结果吗?

1 个答案:

答案 0 :(得分:3)

对不起?为什么要将日期转换为其他类型进行比较?如果日期没有时间组件,那么您可以这样做:

DA.ACCESS_DATE >= CCM.START_DATE AND
DA.ACCESS_DATE < COALESCE(CCM.[END_DATE], '20161001') 

如果日期确实包含时间组件而你想忽略它们,那么你应该转换为date,但只能删除时间组件。

我应该指出,这可能无法提高效果。此版本有可能利用可用的索引 - 如果它们合适的话。使用索引可以加快查询速度。