2010-12-21 5 views
1

그래서 큰 데이터 집합 (내 이전 질문을 참조하십시오) 내가 다른 테이블에 가지고있는 ID를 기반으로 부분 집합을해야합니다.큰 테이블의 RSQLite Fat Subsetting?

다음과 같은 문을 사용합니다.

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 기가이기 때문에 그것은 시간이 오래 걸린다. 주요한 문제는 "SUB #"을 만들기 위해 많은 다른 테이블 "LIST #"에 대해 이것을 실행해야 할 것이므로 서브 세트가 분리되지 않도록 UNIVERSE에서 레코드를 삭제할 수 없습니다. 그것.

잘못 설정된 부분 집합에 대해 생각해 보았나요 아니면 다른 방법으로 속도를 높일 수 있는지 궁금합니다.

도움을 주셔서 감사합니다.

+0

문제에 대한 답변을 찾았습니까? 이것을 처리하는 몇 가지 다른 방법이 있습니다. – Jay

+0

각 #에 대해 phsycially 다른 테이블로 끝나기를 원하십니까/필요합니까? – Jay

답변

1

이것은 이전 질문이었으며 솔루션을 찾았는지 여부는 알 수 없습니다. UNIVERSE.ID가 NULL이 아닌 고유 한 정수인 경우 'INTEGER PRIMARY KEY'로 설정하면 작업 속도가 빨라집니다. 여기에 몇 가지 코드와 토론이 있습니다 : http://www.mail-archive.com/r-sig-db%40stat.math.ethz.ch/msg00363.html

내부 조인을 사용하면 작업 속도가 빨라지는지 모르겠습니다. 시도할만한 가치가있을 수도 있습니다.

1

UNIVERSE.ID에 대한 색인이 있습니까? 나는 SQLite 전문가는 아니지만 일반적으로 쿼리 할 필드에 인덱스가 있어야합니다.

+0

나는 그렇게 생각하지 않는다. 어떻게 확인 및/또는 추가 할 수 있습니까? –

관련 문제