所以我有一个很大的数据集(请参阅上一个问题),我需要根据另一个表中的ID对其进行子集化

我使用如下语句:

vars <- dbListFields(db, "UNIVERSE")
ids <- dbGetQuery(db, "SELECT ID FROM LIST1"

dbGetQuery(db,
    paste("CREATE TABLE SUB1 (",
    paste(vars,collapse=" int,"),
    ")"
)   )

dbGetQuery(db,
    paste("INSERT INTO SUB1 (",
        paste(vars,collapse=","),
        ") SELECT * FROM UNIVERSE WHERE
        UNIVERSE.ID IN (",
        paste(t(ids),collapse=","),
        ")"
)   )


该代码运行(我可能在上面省略了括号),但是要花一些时间,因为我的表UNIVERSE的大小约为10个演出。主要问题是我将不得不对许多不同的表“ LIST#”运行此命令以使“ SUB#”和子集不脱节,因此当我完成操作后,我不能只是从UNIVERSE删除记录它。

我想知道我是否打算用错误的方式设置子集,或者是否还有其他方法可以加快这一过程?

谢谢您的帮助。

最佳答案

这是一个古老的问题,我不知道您是否找到了解决方案。如果UNIVERSE.ID是唯一的,非NULL的整数,则将其设置为“ INTEGER PRIMARY KEY”应该会大大加快速度。这里有一些代码和讨论:
http://www.mail-archive.com/r-sig-db%40stat.math.ethz.ch/msg00363.html

我不知道使用内部联接是否会加快速度;也许也值得一试。

10-06 06:35