所以我有一个大型数据集(参见我之前的问题),我需要根据我在另一个表中的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中的记录它
我想知道我是否已经采用错误的方式进行分组,或者是否还有其他方法可以加快速度?
感谢您的帮助。
答案 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
我不知道使用内连接是否会加快速度;它也许值得一试。