RSQLite加快大表的子集?

时间:2010-12-21 21:56:15

标签: sqlite r

所以我有一个大型数据集(参见我之前的问题),我需要根据我在另一个表中的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中的记录它

我想知道我是否已经采用错误的方式进行分组,或者是否还有其他方法可以加快速度?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您对UNIVERSE.ID有索引吗?我不是SQLite大师,但通常你希望你要查询的字段有索引。

答案 1 :(得分:1)

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

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