2

我在 R 中使用 RSQLITE 来构建数据库并执行“加入”操作并使用以下方法提取行:

    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的会话信息:

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
4

1 回答 1

3

简单的回答:重要查询的 16 个 JOINS 意味着您的查询和/或数据库设计得不好。改进方法 - 减少连接:

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

您也可以对查询优化和性能调整进行大量研究。

于 2013-06-25T07:51:17.763 回答