RSQLite Faster Subsetting для большой таблицы? - PullRequest
1 голос
/ 22 декабря 2010

Итак, у меня есть большой набор данных (см. Мой предыдущий вопрос), где мне нужно его поднастроить на основе идентификатора, который есть у меня в другой таблице

Я использую выражение вроде:

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 ]

1 голос
/ 22 февраля 2011

Это довольно старый вопрос, и я не знаю, нашли ли вы решение или нет.Если UNIVERSE.ID является уникальным целым числом, отличным от NULL, его установка в качестве «INTEGER PRIMARY KEY» должна значительно ускорить процесс.Здесь есть некоторый код и обсуждение: http://www.mail -archive.com / r-sig-db% 40stat.math.ethz.ch / msg00363.html

Не знаю, еслииспользование внутреннего соединения ускорило бы или нет;возможно, стоит попробовать.

1 голос
/ 22 декабря 2010

У вас есть индекс на UNIVERSE.ID? Я не гуру SQLite, но, как правило, вы хотите, чтобы поля, по которым вы будете запрашивать, имели индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...