2012-09-11 31 views
2

我使用RSQLITE R中建立數據庫,並做「加入」操作,並使用提取的行:取()掛在RSQLite大型查詢

res<-dbSendQuery(con," SELECT DISTINCT all_transcript.transcript1 from temp LFET OUTER JOIN....") 

總共有16 JOIN操作。 我驗證上述命令工作正常,因爲讀取(res)返回500(默認)行數。此外,它只適用於有限的行數。但是當我提供提取(res,n = -1)來提取所有行數時,它會掛起。任何想法? 我剛剛給了fetch(res,n = 4000),它沒有響應。

sessionInfo將R的:

sessionInfo(): 
R version 2.14.1 (2011-12-22) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C 
[3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8 
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=C     LC_NAME=C 
[9] LC_ADDRESS=C    LC_TELEPHONE=C 
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

other attached packages: 
[1] RSQLite_0.11.1 DBI_0.2-5 
+2

可以從命令行訪問sqlite數據庫(在linux上);你的查詢在那裏工作嗎?不妨提供'sessionInfo()'的輸出,你機器上的可用內存,以及你期望返回的對象的大小...... –

+0

它並沒有讓我想從命令行運行它。我正在運行它,我期待它需要一些時間(我會更新它)。儘管我已經在問題中編輯了sessionInfo。我在集羣上運行它,它具有超過500G的內存,並且我預計對象的大小至少爲40G。 – user1631306

+0

我在命令行(在Linux上)運行它,似乎它根本沒有工作。由於我沒有看到任何內存使用情況,所以沒有迴應。 – user1631306

回答

3

答案很簡單:16 JOINS的重要手段查詢您的查詢和/或數據庫沒有設計好。如何改善 - 少做加盟:

  1. 創建彙總表(S),去歸一化表
  2. 調你的,早在查詢計劃儘可能applpying過濾器來查詢數據,所以數據較少加入
  3. 保持DB更強大的服務器上,並使用其他數據庫引擎,使[R應用程序查詢數據庫,只是結果存儲在sqlite的

有很多的研究,你可以在查詢優化和性能調整也這樣做。