RODBC posixct日期字段使查询非常慢

时间:2017-09-18 17:25:23

标签: sql-server r rodbc rjdbc

我需要RODBC sqlQuery的帮助。我运行一个产生11千行数据的SQL脚本。使用RODBC获取数据需要78秒,但不幸的是,当我包含日期/时间字段时,从RODBC获取数据需要180秒,而在Management Studio中只需78秒。我想知道为什么请和我能做些什么。

日期/时间字段在Sql server上具有以下格式: YYYY-MM-DD HH:MM:SS.000

在运行此查询之前,我确保Sys.setenv(TZ="UTC")

lossdata <- as.data.table(sqlQuery(dbhandle, qry)) 

qry 是一个字符串, dbhandle 是使用odbcDriverConnect设置的。

当我从R:YYYY-MM-DD HH:MM:SS (without .000)

拉出时,我以此格式获取日期/时间字段

我也尝试过RJDBC,但需要相同的时间。使用RJDBC后,将日期/时间字段从字符转换为posixct也需要很长时间,因此它不是一个好的选择。不幸的是,我需要将字段放在posixct中,因为我在排序中使用它,如果它不是这种数据类型则需要太长时间。

请帮忙。我不确定如何重现这个例子。如果您需要任何其他信息,请与我们联系。

SQL查询

使用 EventDate

select pp.EventDate as EVENTDATE, pp.EVENTID as EVENTID 
from 
    (select * from set.dbo.events where setid in (16,32)) pp 
     inner join 
        (select eventid from databasename.dbo.rdm_port where anls = 93) y 
     on pp.EventId = y.EVENTID

不使用 EventDate

select pp.EVENTID as EVENTID 
from 
   (select * from set.dbo.events where setid in (16,32)) pp 
    inner join 
       (select eventid from databasename.dbo.rdm_port where anls = 93) y 
    on pp.EventId = y.EVENTID

1 个答案:

答案 0 :(得分:0)

DATEDIFF(s,'1970-01-01 00:00:00',pp.EventDate) as EVENTDATE

使用RJDBC代替解决了这个特殊问题。

RODBC需要比RJDBC更长的时间。使用RJDBC将所有内容存储为数字。

自1970-31-01以来,日期现在以秒为单位,可快速排序。如果需要,可以将其转换为日期。