2015-06-19 62 views
13

我是R新手,但有興趣使用Shiny使用存儲在SQL Server數據庫中的數據創建動態圖表。爲了實現交互性,我想從數據庫中提取原始數據並在R內執行計算,而不是讓數據庫彙總數據。R:使用RODBC和SQL Server緩慢讀取性能

我能夠使用RODBC連接到數據庫,執行查詢並以data.frame接收結果。但是,R中的讀取時間比在SQL Server Management Studio(SSMS)中執行的相同查詢的時間長大約12倍。 SSMS需要約600毫秒,而R需要約7.6秒。我的問題是我做錯了什麼,或者是數據庫訪問真的很慢?如果是這樣,是否有更快的選擇(例如將數據庫輸出寫入文件並讀取文件)?

有關可能有所幫助的查詢的一些信息:查詢將檢索包含4列的大約250K行。第一列是日期,其他三個是數字值。運行R的機器和SSMS是32GB內存的高端Win 7工作站。我正在運行的R命令是:

system.time(df <- sqlQuery(cn, query)) 

返回:

user system elapsed 
7.17 0.01 7.58 

有趣的是,它似乎是從SQL數據傳送到我的機器速度快,但R忙於內部做的事情幾秒鐘後再返回data.frame。我看到這一點是因爲網絡利用率在第一秒內出現峯值,幾乎立即回到接近0.然後幾秒鐘後,Rdata.frame返回。

+0

很確定這只是很慢,我們評估了一段時間,並決定去另一條路線,然後使用RODBC,它只是減速,除非是非常簡單的查詢。 – Hansi

回答

0

我會確保你的[R時區 - sys.setenv(TZ = 'GMT')設置爲GMT例如 - 與您要提取數據的SQL服務器的時區相同。可能是因爲日期列需要很長時間才能解釋,特別是如果它有時間戳。

RJDBC將運行更快,因爲它將日期轉換爲字符,其他所有內容都轉換爲數字。 RODBC將嘗試保留SQL表的數據類型。