2017-09-18 86 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開始,日期現在以秒爲單位,快速排序。如果需要,它可以轉換爲日期。