我在 R 中使用 RSQLITE 来构建数据库并执行“JOIN”操作并使用以下方法提取行:
res<-dbSendQuery(con," SELECT DISTINCT all_transcript.transcript1 from temp LFET OUTER JOIN....")
总共有 16 个 JOIN 操作。 我验证上面的命令工作正常,因为 fetch(res) 返回 500(默认)行数。此外,它仅适用于有限数量的行。但当我提供 fetch(res,n=-1) 来提取所有行数时,它会挂起。任何想法? 我刚刚给出了 fetch(res,n=4000) 但它没有响应。
R 的 session 信息:
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
最佳答案
简单回答:重要查询的 16 个 JOINS 意味着您的查询和/或数据库设计得不好。改进方法 - 减少连接:
- 创建汇总表、非规范化表
- 通过尽早在查询计划中对数据应用过滤器来调整查询,从而减少加入的数据
- 将数据库保留在更强大的服务器上并使用另一个数据库引擎,并使 R 应用程序查询该数据库并将结果存储在 sqlite 中
您还可以在查询优化和性能调整方面进行大量研究。
关于r - 对于大型查询,Fetch() 在 RSQLite 中挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12377017/