r - 对于大型查询,Fetch() 在 RSQLite 中挂起

标签 r sqlite

我在 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 意味着您的查询和/或数据库设计得不好。改进方法 - 减少连接:

  1. 创建汇总表、非规范化表
  2. 通过尽早在查询计划中对数据应用过滤器来调整查询,从而减少加入的数据
  3. 将数据库保留在更强大的服务器上并使用另一个数据库引擎,并使 R 应用程序查询该数据库并将结果存储在 sqlite 中

您还可以在查询优化和性能调整方面进行大量研究。

关于r - 对于大型查询,Fetch() 在 RSQLite 中挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12377017/

相关文章:

使用响应式(Reactive)绘图时出现 R Shiny 错误

r - 如何在 R 中以分组行为条件编写新列?

java - Android SimpleCursorAdapter.ViewBinder 不更新绑定(bind)的 TextView

r - 如何在 Linux 中使用命令行从具有特定扩展名的目录中删除文件

r - 如果 {...} 否则 {...} : Does the line break between "}" and "else" really matters?

ios - 数据库无法加载 WatermelonDB react-native

android - 房间 - 选择带有 IN 条件的查询?

python - sqlite 中的 Django hstore 字段

ios - 如何在 Storyboard 的 UITableView 中显示来自 sqlite 的数据

r - 使用 ggplot2 和 ggpmisc 无法获取两位小数的 R2 值