2017-09-18 47 views
0

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

的日期/时间字段是SQL Server上这种格式的:YYYY-MM-DD HH:MM:SS.000

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

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

QRY是一个字符串,数据库句柄使用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 
+0

请显示包含日期时间的查询,以及不查看计算运行情况的查询。 – Parfait

+0

我已经使脚本更小以使其可读,让我知道如果你有任何问题。 – charliealpha

+0

也许RODBC使用函数'as.Date'将非常缓慢的DateTime列从字符转换为Date。有关详细信息,请参阅https://stackoverflow.com/a/12788992/6004997:“所以问题的关键(我认为)是为什​​么strptime非常慢,也许可以在R中进行改进,或者避免POSIXlt,或者直接或间接“。 –

回答

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

一nd使用RJDBC来解决这个问题。

RODBC需要比RJDBC更长的时间。一切都使用RJDBC作为数字存储。

自1970-01-01开始,日期现在以秒为单位,快速排序。如果需要,它可以转换为日期。