Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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_Sql Server 2008_Msbi - Fatal编程技术网

Sql 在结果之间比较日期会降低性能

Sql 在结果之间比较日期会降低性能,sql,sql-server,sql-server-2008,msbi,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, con

我正在查询的
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) 
CONVERT(INT,CONVERT(VARCHAR(10),DA.ACCESS\u DATE,112))
>=转换(INT,CONVERT(VARCHAR(10),CCM.START_DATE,112))
及
转换(INT,CONVERT(VARCHAR(10),DA.ACCESS_DATE,112))
使用上述条件运行查询时,返回输出需要花费大量时间


有什么办法能更快地得到结果吗?

对不起?为什么要将日期转换为其他类型进行比较?如果日期没有时间组件,则可以执行以下操作:

DA.ACCESS_DATE >= CCM.START_DATE AND
DA.ACCESS_DATE < COALESCE(CCM.[END_DATE], '20161001') 
DA.ACCESS\u DATE>=CCM.START\u日期和
DA.ACCESS\u日期<合并(CCM.[结束日期],'20161001')
如果日期确实包含时间组件,并且您希望忽略它们,那么您应该转换为
date
,但仅删除时间组件


我应该指出,这可能不会提高性能。如果合适的话,这个版本有机会利用可用的索引。使用索引将加快查询速度。

对不起?为什么要将日期转换为其他类型进行比较?如果日期没有时间组件,则可以执行以下操作:

DA.ACCESS_DATE >= CCM.START_DATE AND
DA.ACCESS_DATE < COALESCE(CCM.[END_DATE], '20161001') 
DA.ACCESS\u DATE>=CCM.START\u日期和
DA.ACCESS\u日期<合并(CCM.[结束日期],'20161001')
如果日期确实包含时间组件,并且您希望忽略它们,那么您应该转换为
date
,但仅删除时间组件


我应该指出,这可能不会提高性能。如果合适的话,这个版本有机会利用可用的索引。使用索引将加快查询速度。

是否需要转换值?是否需要转换值?是否可能重复DA.ACCESS\u日期的类型为Datetime和START\u DATE,END\u DATE是否需要在两个表上都包含索引,如果是,那么哪个索引是聚集的还是非聚集的?@AnkurJain。如果您有关于索引的问题,您应该问另一个问题并包括查询(或其简化版本)。但是,对于这个查询,您应该尝试在
da(access\u date)
ccm(start\u date,end\u date)
上建立索引。da.access\u date的类型是Datetime,start\u date和end\u date是date。我需要在这两个表上都包含索引吗?如果需要,那么是聚集索引还是非聚集索引?@AnkurJain。如果您有关于索引的问题,您应该问另一个问题并包括查询(或其简化版本)。但是,对于这个查询,您应该在
da(访问日期)
ccm(开始日期、结束日期)
上尝试索引。